特定のクラス型を配列で探したいと思います。方法はわかりません。
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」ステートメントを使用して、次のように使用することもできます。
using MyClass;
(...)
c = arr.getWithType(C);
Lambdaクラスでも同様の動作を実現できます。
using Lambda;
c = arr.filter(function(el) return Std.is(el, C)).first();
mixinsを見てください。要素の型をチェックして返す独自の関数を書くことができます。