Следующий код не компилируется:
class OuterClass<T> {
class BaseClass { }
class SubClass extends BaseClass { }
public void test(BaseClass myObject) {
boolean b = (myObject instanceof SubClass);
}
}
Сообщение об ошибке в методе test()
: "Невозможно выполнить проверку instanceof для параметризованного типа 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.