Java:如何创建所有必须从特定类型派生的类类型的LinkedList?

时间:2016-02-07 19:26:07

标签: java generics

我正在尝试创建类类型的链接列表,其中列表中的每个条目都必须从指定的类型派生。这是我目前的尝试,其中Rigidbody是一个扩展Component的类:

LinkedList<Class<Component>> required = new LinkedList<Class<Component>>();
required.add( Rigidbody.class );

导致错误:

The method add(Class<Component>) in the type LinkedList<Class<Component>> is not applicable for the arguments (Class<Rigidbody>)

似乎只期待精确的Component类,并且它不支持子类型。我已经尝试将其参数化为Class<T extends Component>,但该语法似乎只适用于方法。

无论如何我可以实现这一点而不会回到非特定的LinkedList<Class>类型吗?

1 个答案:

答案 0 :(得分:3)

声明List<Class<Component>>是不变的(它只接受Class<Component>)并且您需要使其变为协变,以便它可以接受子类型。

    LinkedList<Class<? extends Component>> required = new LinkedList<>();
    required.add(Rigidbody.class);

在“高效Java”一书中查看PECS(Producer扩展消费者超级版)。