我在继承方面遇到了一个奇怪的问题,我不明白为什么它不起作用:
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
最佳答案
乍一看似乎违反直觉,但即使类 B
是 A
的子类,一个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/