如何使用泛型在数组中查找类类型

时间:2012-07-20 23:05:53

标签: haxe

我想在数组中查找特定的类类型。不知道如何。

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>();

2 个答案:

答案 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,您可以编写自己的函数来检查元素类型并返回它们。