考虑下面的片段。我了解关于泛型类型的覆盖是如何工作的,以及为什么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;
}
}