具有参数化列表的 Java 继承

标签 java inheritance parameterized

我在继承方面遇到了一个奇怪的问题,我不明白为什么它不起作用:

public interface A {  }

public interface B extends A {}


public class C {
void test() {
    ArrayList<A> foo = new ArrayList<B>();
    }
}

但是编译出现以下错误

Type mismatch: cannot convert from ArrayList<B> to ArrayList<A> C.java /bla/src/de/plai/test line 8 Java Problem

最佳答案

乍一看似乎违反直觉,但即使类 BA 的子类,一个List<B>不是 List<A> 的子类。我在this earlier answer中给出了更详细的解释和示例到类似的帖子。另请参阅this other answer获取Effective Java 2nd Edition中相应项目的链接。

此问题的解决方案是使用通配符。因此你应该将你的列表声明为

List<? extends A> foo = new ArrayList<B>();

关于具有参数化列表的 Java 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5612157/

相关文章:

ios - uiviewcontroller 没有从 ios 中的父类导入

c# - 如何在用于 SQL 插入的方法中进行参数化查询?

java - 使用另一个类的字段类型实例化参数化类

java - 如何在 eclipse rcp 中显示作业进度?

java - 在建筑物中添加人员时,引用学校类(class)的最合适方式是什么?

Java List 如何设置和获取父类型列表的子对象

parameterized - py.test 在特定的 testSuite 中运行测试

具有自定义匿名比较器的 Java 优先级队列

java - 安装 JOGL (Eclipse) 时出现问题

java - 推荐的 REST API 日期格式