我想查找特定的類類型到數組中。不知道如何。如何在使用泛型的數組中尋找類的類型
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;
}
請注意,您需要傳遞「Class」參數。你會使用這樣的:
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();
看mixins,您可以編寫自己的功能,將檢查元素類型和返回他們。