我在下面的Java代碼中遇到了一個非常奇怪的編譯錯誤。Java通用返回類型問題
我有具有通用返回類型的API一個簡單的界面:
public interface AttributeGenerator {
<T> T generateAttribute(Record record);
}
我可以寫一個實現,這在一個晴朗的編譯:
public class StringAttributeGenerator implements AttributeGenerator {
@Override
public String generateAttribute(Record record) {
return "Test";
}
}
現在,讓我們說,我再添參數到上述接口。
public interface AttributeGenerator {
<T> T generateAttribute(Record record, Set<Integer> indices);
}
我提供了另一種實現方式爲:
public class StringAttributeGenerator implements AttributeGenerator {
@Override
public String generateAttribute(Record record, Set<Integer> indices) {
return "Test";
}
}
的編譯失敗,編譯器抱怨:
該方法不從其超覆蓋。
我不明白爲什麼編譯器不能編譯第二個實例,如果不是,我想了解爲什麼Java不能爲用戶提供編寫這樣的代碼的工具。
第一個代碼段不能編譯給我(JDK 1.8.0_60) – Tunaki
@Tanuki奇怪!它爲我編譯好!你會得到什麼錯誤? – bhuwansahni
編譯第一個代碼片段,我得到:'Type safety:來自類型StringAttributeGenerator的generateAttribute(Record)的返回類型String需要未檢查的轉換以符合來自類型AttributeGenerator'的T,但我在eclipse中設置了警告。 – azurefrog