为什么这不起作用?我认为该列表能够接受作为 A
实例的任何对象。 .
import java.util.List;
public class Test {
interface A {}
interface B extends A {}
class BImpl implements B {}
List<? extends A> listOfAExtensions;
void function() {
B b = new BImpl();
listOfAExtensions.add(b);
// error
// The method add(capture#1-of ? extends Test.A)
// in the type List<capture#1-of ? extends Test.A>
// is not applicable for the arguments (Test.B)
}
}
最佳答案
List<? extends A> listOfAExtensions
不等于
List<A> listOfAExtensions
因为你可以分配
List<? extends A> listOfAExtensions = new ArrayList<CImpl>();
其中CImpl
是与BImpl
无关的A
的实现。如果您可以在此之后将 BImpl
添加到 listOfExtensions
中,那么您将添加一个 BImpl
到不相关的 CImpl
列表,这是没有意义的。因此,编译器不允许您将 BImpl
实例添加到 listOfAExtensions
。
关于java - 为什么没有列表<?扩展 A> 接受扩展 A 的 B 的实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49126689/