Я ищу безопасный способ для вилки в зависимости от типа объекта. Я не узнал, как проверить, принадлежит ли объект определенному родовому типу.Как проверить, что объект является экземпляром generic в Haxe
class Test {
static function main() {
var aa = new AA<Int>();
//ERROR: Cast type parameters must be Dynamic
//var a:A<Int> = cast(aa, A<Int>);
//ERROR: Unexpected)
//var a:A<Int> = Std.instance(aa, A<Int>);
//OK, but throw run-time exception with flash target.
var a:A<Int> = cast aa;
a.printName();
//Run-time exception
a = cast "String is obviously wrong type";
}
}
class A<T> {
public function new() { }
public function printName() {
trace("Generic name: A");
}
}
class AA<T> extends A<T> {
public function new() { super(); }
override public function printName() {
trace("Generic name AA");
}
}
Есть ли законный способ проверить, принадлежит ли объект родовому типу?
Я не могу воспроизвести это исключение, которое вы используете во Flash. Кроме того, в вашем фрагменте кода отсутствует объявление типа для 'B'. – Gama11
Вы можете проверить это http://try.haxe.org/#C6a93 с помощью SWF-мишени и отладочной flash-плеера. – kolonitsky