java - 为什么具有父类(super class)值的 Map 不能接受子类对象?

标签 java

我有两个类:父类(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/

相关文章:

java - Selenium 移动鼠标不适用于低分辨率

java - react-native run-android 失败,错误为 : Execution failed for task ':app:dexDebug'

java - 如何在 JList 中显示数组列表?

java - 将每个动画 GIF 帧转换为单独的 BufferedImage

java - 如何以相反的顺序使用日期键对 map 进行排序?

javascript - 如何获取动态iframe的xpath?

java - Java : How do you get a Message. Builder 中的 Google Protobufs 来自 FieldDescriptor?

java - 按钮光标显示不正确

java - Dagger 组件有冲突的作用域

java - 执行 Rest Api 的基本自动化脚本时出现 java.net.UnknownHostException