Следующий код не компилируется:
class OuterClass<T> {
class BaseClass { }
class SubClass extends BaseClass { }
public void test(BaseClass myObject) {
boolean b = (myObject instanceof SubClass);
}
}
Сообщение об ошибке метода test()
: " Невозможно выполнить проверку экземпляра для параметризованного типа MyOuterClass.MySubClass. Вместо этого используйте форму MySubClass, так какдальнейшая информация общего типа будет удалена во время выполнения"
Так как же определить, имеет ли переменная тип BaseClass
?Я перепробовал все следующее, и они не работают:
boolean b1 = (myObject instanceof SubClass);
boolean b2 = (myObject instanceof SubClass<T>);
boolean b3 = (myObject instanceof SubClass<?>);
boolean b4 = (myObject instanceof OuterClass.SubClass);
boolean b5 = (myObject instanceof OuterClass<T>.SubClass);
boolean b6 = (myObject instanceof OuterClass<?>.SubClass);
boolean b7 = (myObject instanceof OuterClass.SubClass<T>);
boolean b8 = (myObject instanceof OuterClass.SubClass<?>);
Я думаю, что эта проблема не зависит от версии JVM, но на всякий случай я использую версию Sun 1.6.0_22-b04.