下面的代碼不編譯:問題的「的instanceof」包含通用外部類
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。
假設您擺脫了「我的」前綴,您的「b4」行應該有效。 – highlycaffeinated
而不是測試類,爲什麼不測試一個接口?我認爲這應該可以解決你的問題。 – johnnieb
謝謝您發現錯字,高度無咖啡因;我已刪除前綴「我的」。 –