将ArrayList <Subclass>传递给使用List <Superclass>声明的方法

Cod*_*lue 20 java generics

我有一个方法,其中包含一个包含泛型的参数.

public static void readList(List<ModelObject> list)
{
    // more code
}
Run Code Online (Sandbox Code Playgroud)

我想一个传递ArrayListModelObjectImplementations到这种方法.

ArrayList<ModelObjectImplementation> myList;
myList = ...

readList(myList); // gives compilation error
Run Code Online (Sandbox Code Playgroud)

ModelObject是一个ModelObjectImplementation实现的接口.如何更改方法声明以允许此操作?

bon*_*ade 29

如果您使用的是Java 1.5及更高版本,则可以使用通配符.

public static void readList(List<? extends ModelObject> list)
Run Code Online (Sandbox Code Playgroud)

此解决方案更通用,因为它适用于所有java.util.List接口实现和子类/子接口ModelObject.有关更多详细信息,请转到通配符教程

  • 仿制药也在1.5中引入,所以我认为假设他正在使用它是安全的. (5认同)