将接口作为arraylist类型提供时编译错误

我有一个定义为的接口

interface ListItem { public String toString(); public String getUUID(); } 

以及实现该接口的类( BrowseItem )。 当我尝试:

 ArrayList = (method returning ArrayList of type BrowseItem) 

我得到一个不兼容的类型错误( found ArrayList, require ...

我接近这个错吗?

Javagenerics不是协变的。

请参阅( 关于SO的许多其他问题 ):

  • javagenerics协方差
  • Java协方差
  • Java集合协方差问题
  • 在参数中使用generics集合

解决方案:

  • 更改有问题的方法的返回类型。 也就是说,改变

     List = (method returning List of type browseItem) // to List = (method returning List of type listItem) 
  • 使用通配符协方差(我认为这就是所谓的):

     List = (method returning List of type browseItem) 

    请注意, 如果采用此路线 , 则无法将项目添加到列表中


注意 ,通常将列表类型声明为List而不是ArrayList是一种好习惯。 上面的伪代码反映了这一点。

你的例子不起作用,但你可以使用

 ArrayList list = (method returning ArrayList of type browseItem) 

这应该工作。

ArrayList不等于ArrayList

它们是严格类型安全的

你可以利用?