2012-07-20 58 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(); 
相关问题