讓我們有下面的類層次結構:Java泛型錯誤?
public class MyType {
}
public class MySuperclass<T extends MyType> {
protected Map<String, String> myMap = new TreeMap<String, String>();
protected String myMethod(String s) {
return myMap.get(s);
}
}
public class MySubclass extends MySuperclass {
@Override
protected String myMethod(String s) {
return myMap.get(s); // <-- compilation error
}
}
爲什麼存在的MySubclass
的覆蓋方法編譯錯誤? 錯誤消息是「類型不匹配:無法從對象轉換爲字符串」。
有趣的是,編譯錯誤自敗,如果我在MySubclass
定義定義泛型MySuperclass
類類型:
public class MySubclass extends MySuperclass<MyType> {
@Override
protected String myMethod(String s) {
return myMap.get(s);
}
}
有人可以解釋這種現象?我會認爲它是一個Java編譯器錯誤。
我正在使用jdk1.6.0_24。
正好。那是布洛赫的「困惑者」之一。 – Bozho
所以泛型是全部還是全無?如果您使用原始類型,那麼您將不會獲得該類型的任何泛型,甚至不會依賴於「T」的部分? – Thilo
但是泛型定義中的'MySuperclass ** **'與'Map ** ** myMap'的泛型有什麼共同之處?這些是兩種不同的泛型定義,它們之間沒有「連接」。我不明白。 –