我想在数组中查找特定的类类型。不知道如何。
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>();
答案 0 :(得分: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'语句,以便您可以像这样使用它:
using MyClass;
(...)
c = arr.getWithType(C);
您还可以使用Lambda类实现类似的行为:
using Lambda;
c = arr.filter(function(el) return Std.is(el, C)).first();
答案 1 :(得分:0)
看看mixins,您可以编写自己的函数来检查元素类型并返回它们。