Java泛型混乱

icn*_*icn 0 java generics list

我对java泛型有点困惑

这是代码

class Base{}

class Derived extends Base{}
Run Code Online (Sandbox Code Playgroud)

我们可以实例化这样的列表

List<? extends Base> list = new ArrayList<Base>();
Run Code Online (Sandbox Code Playgroud)

为什么我不能添加这样的新项目

list.add(new Base()); 
Run Code Online (Sandbox Code Playgroud)

所以用户不能使用"添加"方法作为通配符?在遗传学类型?

谢谢

Boz*_*zho 7

PECS - 生产商扩展,消费者超级.

如果替换extendssuper,则可以添加new Base().

List<? extends Base>表示"保存Base(或其Base自身)的任何子类的实例的列表.但它不能保存两个不同子类的实例.

如果你希望你的列表来保存BaseDerived,然后使用List<Base>.但请注意,它无法在以后投射到List<Derived>