如何在此通用集合中添加子类型?

use*_*383 0 java generics object

我希望有一个子类对象的集合,但我的泛型类型实现,因为它现在给出一个错误,allItems.add(item);因为allItems不保持Item类型.那么如何更改以下代码而不是出错呢?

public class ItemManager {
    public static Collection<? extends Item> allItems;
    ...
    public static boolean addItem(Item item){
        return allItems.add(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

可能会添加一个新项目:

itemManager.add(new Bomb());
Run Code Online (Sandbox Code Playgroud)

有没有办法addItem改为:

public static boolean addItem([all subclasses of Item] item) { ... }
Run Code Online (Sandbox Code Playgroud)

或者可能改变allItems所以它可以接受接收Item和子类Item

JB *_*zet 9

该集合应声明为Collection<Item>.

Collection<? extends Item>表示:一个未知类的集合,它是或扩展Item.您无法向此类集合添加任何内容,因为您不知道它所拥有的对象类型.