2012-07-20 47 views
1

我想查找特定的類類型到數組中。不知道如何。如何在使用泛型的數組中尋找類的類型

var a:A = new A(); 
var b:B = new B(); // B extends A 
var c:C = new C(); // C extends A 

var arr:Array<A> = []; 
arr.push(a); 
arr.push(b); 
arr.push(c); 
// i'd like something like: 
c = arr.get<C>(); 

回答

5

在Haxe中,像Java一樣,在代碼內部不能訪問類型參數,因爲在大多數實現中它被擦除,意味着與「動態」相同。這意味着爲了實現這個功能,你需要這樣的功能:

public static function getWithType<T>(array:Array<Dynamic>, cl:Class<T>):Null<T> 
{ 
    for (el in array) 
    { 
     if (Std.is(el, cl)) 
      return el; 
    } 

    return null; 
} 

請注意,您需要傳遞「Class」參數。你會使用這樣的:

c = MyClass.getWithType(arr, C); 

您也可以使用 '使用' 的語句,所以你可以使用它像這樣:

using MyClass; 

(...)

c = arr.getWithType(C); 

您也可以使用Lambda類別實現類似行爲:

using Lambda; 

c = arr.filter(function(el) return Std.is(el, C)).first();