我有以下通用类型:
public class Library<T> {}
我需要将每个泛型类型放入列表中 - 例如:
ArrayList<Library<Photo>> listPhotoLibrary
= new ArrayList<Library<Photo>>();
ArrayList<Library<Video>> listVideoLibrary
= new ArrayList<Library<Video>>();
然后我需要将这些列表放入通用列表中。首先我尝试了这个:
ArrayList<Library<?>> listTopLibrary = new ArrayList<Library<?>>();
上面的代码允许我将所有库添加到一个平面列表中。但是,这不是我想要的。我想要的是在另一个列表中有类型库的列表。例如,索引0是视频库的列表,索引1是照片库的列表,依此类推。我尝试了下面的方法来实现这个目标:
ArrayList<ArrayList<Library<?>>> listTopLibrary
= new ArrayList<ArrayList<Library<?>>>();
这不起作用。当我试图添加到列表中时,它告诉我:
The method add(ArrayList<Library<?>>) in the type ArrayList<ArrayList<Library<?>>>
is not applicable for the arguments (ArrayList<Library<Photo>>)
知道编译器为什么抱怨?如果有办法绕过这个?
答案 0 :(得分:2)
这是一个编译错误,因为ArrayList<Library<?>>
不是ArrayList<Library<Photo>
的超类型。您可以像这样声明数组:
ArrayList<ArrayList<? extends Library<?>>> listTopLibrary = new ArrayList<>();
找到详尽的解释
答案 1 :(得分:1)
您可以使用
修复此问题List<ArrayList<? extends Library<?>>> listTopLibrary = new ArrayList<>();
答案 2 :(得分:0)
ArrayList<Library<?>>
不是ArrayList<Library<Photo>>
您必须将listTopLibrary
声明为
ArrayList<ArrayList<? extends Library<?>>> listTopLibrary