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」ステートメントを使用して、次のように使用することもできます。

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 に答える