Java 如何添加到具有两个已定义泛型的列表中?

Java 如何添加到具有两个已定义泛型的列表中?,java,list,Java,List,在这样定义的列表上执行add()时遇到问题 private final List<TraitGroup <? extends TRAIT_Able>> traitGroups; 拖车组 @SuppressWarnings(“未选中”) 公共类TraitGroup{ 私人最终名单; 公共TraitGroup(){ abstractTraits=新的LinkedList(); } 公共抽象特征[]toArray(){ AbstractTrait[]AbstractTrait

在这样定义的列表上执行add()时遇到问题

private final List<TraitGroup <? extends TRAIT_Able>> traitGroups;
拖车组
@SuppressWarnings(“未选中”)
公共类TraitGroup{
私人最终名单;
公共TraitGroup(){
abstractTraits=新的LinkedList();
}
公共抽象特征[]toArray(){
AbstractTrait[]AbstractTrait=新的AbstractTrait[this.abstractTraits.size()];
for(int i=0;i
无界通配符的问题是它不表示任何类型,它表示未知类型。你的声明实质上用通俗易懂的英语写成:

接受扩展的某些未知类型的跟踪组列表 有能力

而不是

接受扩展TRAIT\u-able的任何类型的traitgroup的列表

一个重要的区别。由于类型未知,编译器将拒绝任何添加到列表中的尝试(因为您要求进行编译时检查,但编译器无法确保您尝试添加到列表中的类型实际上对它有效)。本质上,您正试图定义一个异构的对象集合,因此您不妨将您的列表声明为:

private final List<TraitGroup <TRAIT_Able>> traitGroups;
private final List traitgroup;

无界通配符的问题是它不表示任何类型,它表示未知类型。你的声明实质上用通俗易懂的英语写成:

接受扩展的某些未知类型的跟踪组列表 有能力

而不是

接受扩展TRAIT\u-able的任何类型的traitgroup的列表

一个重要的区别。由于类型未知,编译器将拒绝任何添加到列表中的尝试(因为您要求进行编译时检查,但编译器无法确保您尝试添加到列表中的类型实际上对它有效)。本质上,您正试图定义一个异构的对象集合,因此您不妨将您的列表声明为:

private final List<TraitGroup <TRAIT_Able>> traitGroups;
private final List traitgroup;

您可以显示您的TraitGroup和Traitable类吗?您还可以显示
类型的声明吗?
List
有什么问题?TYPE没有声明,我的意思是作为我想做的一个例子。我只是不知道如何定义类型,以便将其添加到具有该定义的列表中。能否显示您的TraitGroup和Traitable类?能否同时显示
类型的声明
List
有什么问题?TYPE没有声明,我的意思是作为我想做的一个例子。我只是不知道如何定义类型,这样我就可以将它添加到具有该定义的列表中。-1,抱歉:这是错误的
traitGroups
具有类型
List-1,抱歉:这是错误的<代码>跟踪组
具有类型<代码>列表
private final List<TraitGroup <TRAIT_Able>> traitGroups;