为什么这不起作用?我认为该列表可以接受任何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)
}
}
答案 0 :(得分:1)
List<? extends A> listOfAExtensions
与
不同List<A> listOfAExtensions
因为您可以指定
List<? extends A> listOfAExtensions = new ArrayList<CImpl>();
其中CImpl
是与A
无关的BImpl
的实现。如果您之后可以向BImpl
添加listOfExtensions
,则可以添加BImpl
到一个无关的CImpl
列表,这是没有意义的。因此,编译器不允许您将BImpl
的实例添加到listOfAExtensions
。