我想在数组中查找特定的类类型。不知道怎么做。
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>();
我想在数组中查找特定的类类型。不知道怎么做。
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>();
在 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;
}
请注意,您需要传递“类”参数。你会像这样使用它:
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();
查看mixins,您可以编写自己的函数来检查元素类型并返回它们。