在ArrayList中使用泛型(Java,"无法应用"错误)

Mik*_*eev 2 java generics collections android list

在我的Android Studio项目中,我有简单的类结构:

public class P{}

public class A extends P{}

public class B extends P{}
Run Code Online (Sandbox Code Playgroud)

在另一个班级我有一个List:

private List<? extends P> data;
private List<A> listA;
private List<B> listB;
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时:

data = listA; //it's ok
data.addAll(listB); //it calls error
Run Code Online (Sandbox Code Playgroud)

Android Studio中的第二行是红色,错误是:

addAll(java.util.Collection<capture<? extends com.mydomain.P>>) 
in List cannot be applied to (java.util.List<com.mydomain.subclass.B>)
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

njz*_*zk2 5

声明时private List<? extends P> data;您需要一个特定的类型,扩展p列表的内容,这是不必要的.你可以简单地使用:

private List<P> data;
Run Code Online (Sandbox Code Playgroud)

任何延伸P(B和A相似)的课程都将被接受.

(但这会妨碍你分配data = listA)