我有两个类:父类(super class) Cluster 和子类 XCluster。 XCluster 扩展了 Cluster。
我有这个方法签名:
public Map<Integer, XCluster> getClusters() {
...
}
我有这个变量:
Map<Integer, Cluster> clusters = getClusters();
我无法编译这个。 Eclipse 说 getCluster() 方法不返回这种类型。我需要将类型从 XCluster 更改为 Cluster。
出了什么问题?
最佳答案
你不能,因为:generics in Java are not polymorphic
您的主要选项(还有其他选项):
将第二个代码更改为
Map<Integer, ? extends Cluster> clusters = getClusters();
将方法签名更改为:
public Map<Integer, Cluster> getClusters() {}
使用哪个取决于您的用例。
关于java - 为什么具有父类(super class)值的 Map 不能接受子类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514460/