我正在尝试创建类类型的链接列表,其中列表中的每个条目都必须从指定的类型派生。这是我目前的尝试,其中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>
类型吗?
答案 0 :(得分:3)
声明List<Class<Component>>
是不变的(它只接受Class<Component>
)并且您需要使其变为协变,以便它可以接受子类型。
LinkedList<Class<? extends Component>> required = new LinkedList<>();
required.add(Rigidbody.class);
在“高效Java”一书中查看PECS(Producer扩展消费者超级版)。