Java中是否可能存在一个通用类型的列表嵌套另一个通用类型的列表?

4

我有以下通用类型:

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>>)

你有想法为什么编译器会抱怨吗?如果有办法解决这个问题吗?

3个回答

2

这是一个编译错误,因为ArrayList<Library<?>>不是ArrayList<Library<Photo>的超类型。您可以像这样声明数组:

ArrayList<ArrayList<? extends Library<?>>> listTopLibrary = new ArrayList<>();

您可以在Java嵌套泛型类型中找到详细的解释。

谢谢,这是正确的答案,也感谢您提供的链接,很难搜索到正确的关键词。 - user3804927

1
您可以通过使用

来解决这个问题。

List<ArrayList<? extends Library<?>>> listTopLibrary = new ArrayList<>();

0

ArrayList<Library<?>> 不是 ArrayList<Library<Photo>> 的超类型

你需要将 listTopLibrary 声明为

ArrayList<ArrayList<? extends Library<?>>> listTopLibrary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接