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

2 回答 2

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;
}

请注意,您需要传递“类”参数。你会像这样使用它:

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();
于 2012-07-21T21:02:28.153 回答
0

查看mixins,您可以编写自己的函数来检查元素类型并返回它们。

于 2012-07-21T06:52:31.307 回答