請考慮下面的代碼片段。我瞭解如何覆蓋泛型類型,以及爲什麼返回類型List<String>
(例如)被允許覆蓋List<? extends Object>
。然而,我不完全清楚爲什麼像1和2這樣的陳述不能編譯......不應該在這裏也適用繼承嗎?通用返回類型 - 爲什麼我不能這樣做?
public class Generics {
public static void main(String[] args) {
A instance = new B();
X instance2 = new Y();
Map<String, String> map = instance2.getMap(); // 1
List<String> list = instance.getList(); // 2
}
}
class A {
List<? extends Object> getList() {
return null;
}
}
class B
extends A {
List<String> getList() {
return new LinkedList<String>();
}
}
class X {
Map<String, ? extends Object> getMap() {
return null;
}
}
class Y
extends X {
@Override
Map<String, String> getMap() {
return null;
}
}
我知道已經有答案了,但是可以發佈編譯器錯誤嗎? – Jerome
對不起,我收到了一個普通的靜態類型檢查錯誤(即「不能從列表<?extends Object>轉換爲列表)。 –
csvan