Java 以arraylist类型提供接口时发生编译错误
我有一个定义为Java 以arraylist类型提供接口时发生编译错误,java,interface,arraylist,Java,Interface,Arraylist,我有一个定义为 interface ListItem { public String toString(); public String getUUID(); } 以及实现该接口的类(BrowseItem)。当我尝试时: ArrayList<ListItem> = (method returning ArrayList of type BrowseItem) ArrayList=(返回BrowseItem类型的ArrayList的方法) 我得到一个不兼容的类型错
interface ListItem {
public String toString();
public String getUUID();
}
以及实现该接口的类(BrowseItem
)。当我尝试时:
ArrayList<ListItem> = (method returning ArrayList of type BrowseItem)
ArrayList=(返回BrowseItem类型的ArrayList的方法)
我得到一个不兼容的类型错误(找到ArrayList,需要…
)
我是不是搞错了?ArrayList
不等于ArrayList
它们是严格类型安全的
您可以使用
?
Java泛型不是协变的
见():
解决方案:
- 更改有问题方法的返回类型。也就是说,改变
List<listItem> = (method returning List of type browseItem) // to List<listItem> = (method returning List of type listItem)
List=(返回browseItem类型列表的方法) //到 List=(返回listItem类型列表的方法)
- 使用通配符协方差(我认为这就是所谓的):
List您的示例不起作用,但您可以使用
ArrayList<? extends ListItem> list = (method returning ArrayList of type browseItem)
ArrayList
ArrayList<? extends ListItem> list = (method returning ArrayList of type browseItem)