有人可以向我解释以下行为吗?
我有一个列表X
并使用该addAll()
方法添加元素.这些元素由使用泛型类型的方法返回.方法getA()
返回< T extends A >
与A
作为一类.方法getI()
返回< T extends I >
与I
作为一个接口(见下面的代码).
差异:listX.addAll(getA())
我得到编译错误(如预期的那样),但是listX.addAll(getI())
编译(当元素被强制转换时抛出运行时错误X
).
简化代码:
interface I {}
class A implements I {}
class X {}
public void test() {
List<X> listX = new ArrayList<>();
listX.addAll(getA());
listX.addAll(getI());
for (X x : listX) {}
}
public <T extends A> List<T> getA() {
return new ArrayList<>();
}
public <T extends I> List<T> getI() …
Run Code Online (Sandbox Code Playgroud)