Java Can';是否将ModuleInfo对象添加到ArrayList<;?扩展模块信息>;

Java Can';是否将ModuleInfo对象添加到ArrayList<;?扩展模块信息>;,java,generics,netbeans,Java,Generics,Netbeans,我不确定是否正确使用了泛型,但基本上我创建了一个Arraylist假设您创建了一个Arraylist,如下所示:- List<? extends Animal> list = new ArrayList<Dog>(); 您可以只创建一个列表,并向其中添加任何子类型:- List<Animal> newList = new ArrayList<Animal>(); newList.add(new Cat()); // Ok. Can add a

我不确定是否正确使用了泛型,但基本上我创建了一个
Arraylist假设您创建了一个Arraylist,如下所示:-

List<? extends Animal> list = new ArrayList<Dog>();
您可以只创建一个
列表
,并向其中添加任何子类型:-

List<Animal> newList = new ArrayList<Animal>();
newList.add(new Cat());  // Ok. Can add a `Cat` to an `Animal` list.
List newList=newarraylist();
newList.add(new Cat());//好啊可以将“猫”添加到“动物”列表中。
上述代码之所以有效,是因为
列表
引用只能指向
数组列表


因此,在您的示例中,您可以使用:-

List<ModuleInfo> list = new ArrayList<ModuloInfo>();
List List=new ArrayList();
作为旁注,您应该始终编程到
接口
,而不是
实现
。因此,请始终使用
接口
的引用类型,在这种情况下,请使用
列表
,而不是
数组列表
,来解决问题。请使用:

ArrayList<ModuleInfo> moduleList = new ArrayList<ModuleInfo>();
ArrayList moduleList=new ArrayList();

这会将您的列表限制为ModuleInfo实例及其子类。

您将moduleList声明为
ArrayList类型,我将声明更改为
ArrayList
,效果良好。我感到困惑,认为应该是这样,因为从查找对象返回的集合是
Collection
List<ModuleInfo> list = new ArrayList<ModuloInfo>();
ArrayList<ModuleInfo> moduleList = new ArrayList<ModuleInfo>();