2013-11-26 31 views
1

Main.asActionScript獲取Class類,這是不是包?

package{ 
    public class Main extends Sprite{ 
     public function Main() { 
      new ProxyClass(new HiddenClass()) 
     } 
    } 
} 

class HiddenClass(){ 
    ... 
} 

ProxyClass.as

package{ 
    public class ProxyClass extends Sprite{ 
     public function ProxyClass(value:*) { 
      trace(value, value.constructor) // [object HiddenClass] [class HiddenClass] 
      switch (value.constructor) { 
       case Sprite: 
        ... 
        break; 
       case "class HiddenClass": //??????? 
        ... 
        break; 
      } 
     } 
    } 
} 

我有一些遺留代碼,並不能改變Main.as.我需要在我的ProxyClass中檢查Class類型的值,但是HiddenClass已不在包中並且僅對Main.as可見。 我如何驗證HiddenClass?

回答

2

好吧,考慮到它不是一個可見的屬性,你不會得到它的定義,你很可能不得不重寫你的switch語句來使用Strings而不是Object。只需將value.constructor轉換爲String,然後將其用作case "[class HiddenClass]"

+0

是的,或者使用默認情況並檢查'value.constructor'的'toString()'值以匹配HiddenClass。成功匹配後,您可以將類定義緩存在ProxyClass的靜態變量中,然後在需要時檢查該變量。 – Vesper

0

使用flash.utils.getQualifiedClassName。這是一個全球性的功能,可以爲您提供軟件包+課程名稱。例如:

MyClass       // default package 
com.mycompany.mypackage::MyClass // package com.mycompany.mypackage 

所以基本上:

​​

確認這些字符串是正確的人進行檢查,但是當我嘗試了幾個我自己的類(包括隱藏的一個),它看起來像這些是你會回來的價值。

相關問題