我有類似這樣的代碼:泛型問題 - 無法編譯代碼,可能是因爲類型擦除
public class A<E> {
protected E value;
public E getValue() {
return value;
}
public void setValue(E value) {
this.value = value;
}
}
然後,我有一個類來擴展這個類,稱爲B
public class B extends A<Boolean> {
// B has some other code, but doesn't edit the set/get methods
}
然後我將這兩個類編譯爲A.class,B.class並且它們是JARed。
然後,我有以下代碼:
public class C {
// ... snip
B var = new B();
var.setValue(true);
if(var.getValue()) {
// etc
}
// ... snip
}
試圖編譯這將導致一個錯誤,告訴我,var.getValue返回的對象。我知道這是一個布爾值,當我用A/B java文件包含C並且一次編譯完成時,它可以正常工作。
但是,當我分別編譯A/B到C我得到的問題,它認爲var.getValue是一個對象。
我一直在閱讀有關泛型和類型擦除,但我想不出一種方法來解決它。
我試圖建立一個類似C使用的包,但如果我必須施放所有getValues,那麼泛型沒有意義。
我哪裏錯了?
(實際的代碼是在this github repo,並且是A和B違規類ModOption/ModBooleanOption我沒有在那裏的C代碼,但很明顯。)
編輯:我使用JavaSE6編譯和混淆。奇怪的是,如果我經常編譯,然後嘗試這個例子也很好。我開始懷疑混淆器。
此問題已解決;我進一步測試,發現混淆器打破了泛型,我不知道爲什麼,不知道爲什麼。我會聯繫它的維護者。
您使用的是什麼SDK?你的例子使用jdk1.6.0_25編譯得很好(單獨或一起)。 – jkraybill 2011-05-16 03:31:03
@jkraybill Java SDK 6.在生產版本中,代碼針對混淆器(不是我的選擇)運行,這是唯一的區別。 – Clintonio 2011-05-16 03:47:54
出於好奇,因爲問題是混淆器,你能分享你正在使用哪一個嗎? – 2011-06-01 04:38:31