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)