pla*_*hos 2 java inheritance parameterized
我有一个奇怪的继承问题,我不明白为什么它不应该工作:
public interface A { }
public interface B extends A {}
public class C {
void test() {
ArrayList<A> foo = new ArrayList<B>();
}
}
Run Code Online (Sandbox Code Playgroud)
但编译给我以下错误
Type mismatch: cannot convert from ArrayList<B> to ArrayList<A> C.java /bla/src/de/plai/test line 8 Java Problem
一开始看起来有点违反直觉,但即使class B
是其子类A
,a List<B>
也不是它的子类List<A>
.我在之前对类似帖子的回答中给出了更详细的解释和示例.另请参阅另一个答案,以获取Effective Java 2nd Edition中相应项目的链接.
解决此问题的方法是使用通配符.因此,您应该将列表声明为
List<? extends A> foo = new ArrayList<B>();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2477 次 |
最近记录: |