2009-06-05 5 views

Antwort

4

Kurze Antwort grapefrukt's answer versuchen und sehen.

Allerdings glaube ich nicht, dass es auf Bytecodeebene möglich ist. Das Problem hängt damit zusammen, wie Generika (Vektoren) konstruiert werden. Grundsätzlich ist der Bytecode für eine Instanz von Vector Schaffung <> geht:

GenericDefinitionType (Vector) + GenericParameter (int) -> GenericType 
Coerce (cast) GenericType as KnownGenericType (eg. "Vector.<int>") 

Also das Problem ist nicht in der Kreation, da GenericParameter ist nur ein multiname (die dynamisch sein kann). Das Problem liegt in der Nötigung zu dem bekannten Vektor-Typ (zum Beispiel tatsächlich registriert als "Vektor. < int>"), da es keinen bekannten Vektor-Typ gibt.

Siehe meine Post auf how Vectors work in bytecode für die geeky Details.

+0

Ah, ich verstehe was du meinst. Vielen Dank! – fenomas

-1

Dies ist nicht getestet, aber ich kann nicht sehen, warum es nicht funktionieren sollte:

ist
import flash.display.Sprite; 
import flash.utils.getDefinitionByName; 

var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class; 
var v:Vector.<ClassReference> = new Vector.<ClassReference>(); 
+0

Huh? Das macht genau dasselbe wie der nicht funktionierende Beispielcode in meiner Frage, außer mit Sprite anstelle von String. – fenomas

0

Ich fand eine Art, Vektoren dynamisch zu erstellen. Statt den Typ als Klasse geben Sie den ganzen Vektor als Klasse übergeben, wie:

public function createVector (vectorType:Object):Object 
{ 
    return new vectorType(); 
} 

var v:Vector.<String> = createVector(Vector.<String>); 

Oder Sie können einen Vektor wie folgt kopieren:

public function getCopy (ofVector:Object):Object 
{ 
    var copy:Object = new ofVector.constructor; 

    return copy; 
} 
Verwandte Themen