考虑以下代码:
public class ListDemo {
List<Inner> inners;
public ListDemo() {
this.inners = new ArrayList<>();
}
private void load(){
SomeClzz.load(inners);
}
private class Inner implements TestInterface {
@Override
public void bla() {
System.out.println("Bla");
}
}
}
使用界面:
public interface TestInterface {
public void bla();
}
和班级:
public class SomeClzz {
public static void load(List<TestInterface> test){
for (TestInterface testInterface : test) {
testInterface.bla();
}
}
}
我基于一个真实世界的例子创建了这个假代码,因为我想看看我是否可以隔离问题并发现load方法有错误。
为什么SomeClzz.load(inners);
会出现错误,导致内容无法从List<Inner>
投射到List<TestInterface>
?
答案 0 :(得分:1)
简单的改变将使其有效:
public static void load(List<? extends TestInterface> test){
for (TestInterface testInterface : test) {
testInterface.bla();
}
}
<强>更新强> 你可以找到答案here。
简而言之。
List<Inner>
不是List<TestInterface>
的子类型。
在使用泛型编程时,这是一个常见的误解,但是你需要理解这一点,因为泛型是经常使用的非常重要的。