2010-11-01 60 views
2

是否可以將變量作爲動態類型來轉換,其中類型將是類型爲Class的變量?AS3:將變量轉換爲動態類型

考慮以下(無效):

var myClass:Class = MyClass; 
var myInstance:myClass = new myClass(); 

對於背景:我在FLEX(4)努力創造一個模式管理器,將控制產生模態(通過PopUpManager)的各個方面和我我希望儘可能保持最小。組件將通過相同的功能即可通過,而不是讓任何類型的變量定投,如:

var myInstance:* = new myClass(); 

我寧願保持它作爲明確越好。授予AFAIK,這樣做並不是真正的好處,因爲在分配之前,有一些檢查確保參數的類型爲Class - 它比任何POC都多。

歡迎任何想法。

編輯:我想我可以做到以下幾點:

var myClass:Class = MyClass; 
var myInstance:* = new myClass() as myClass; 

,但我不知道這是去了解它的最佳方式。

回答

2

我不認爲編譯器可以處理動態輸入。如果可以的話,可以實現類似於泛型的功能。

我認爲你能做的最好的是:

var myClass:Class = MyClass; 
var myObject:* = new myClass(); 
0

我不這麼認爲。當我期望有不止一種類型的傳入我做這樣的事情:

public function doSomethingWithThis(something:Object):void { 
    var button:Button = something as Button; 
    var image:Image = something as Image; 
    var list:List = something as List; 


    if (button) { 


    } 
    else if (image) { 


    } 
    else if (list) { 


    } 
    else { 
     throw new Error("This type of object will not work with this method."); 
    } 


} 
3

我不知道這是否是一樣的你有或沒有的問題。我需要一個擁有一個實現了界面的孩子的課程。實現類可以是任何類型的,但我需要保存並加載它的所有信息。

比方說,我有以下幾點:

public interface WindowChild {...} 

public class Window { 
    public var child:WindowChild; 
} 

,當它來到的時間來保存我保存在一個XML BLOB的一切窗口。我在Flash播放器中找到了一個函數:
flash.utils.getQualifiedClassName(value:*):String
該文檔說:「返回對象的全限定類名稱。」這意味着它返回的String將類似於your.packages::ClassName。當Window班級致電getQualifiedClassName(child)時,它會得到類似於my.packages.structure::MyImplementation的內容。
請注意,這不是接口WindowChild的路徑,而是我創建的實現該接口的類。

當需要再次加載所有信息時,我使用了另一個Flash功能getQualifiedClassName(child)。此函數「返回對由name參數指定的類的類對象的引用。「我認爲這是說,它返回一個Object但它會Class類型的這樣一種有趣的方式

所有我需要做的則是:

var childClass:Class = getDefinitionByName(childClassName) as Class; //Child class name is what was returned from getQualifiedClassName(child) 
child = new childClass(); // This creates a new Object of what ever type childClass is 

這種做法將使類型檢查對於運行時間,但你總是可以添加其他的中間環節,確保取之於new childClass()返回是你想要的。

希望這是有益的。

乾杯

+0

啊,這非常方便......這可能確實有用。不完全是我的問題,但仍然可能最終找到一個地方。謝謝! – mway 2010-11-01 14:36:31