java - 列表泛型类型在Java中可能吗?

标签 java list generics generic-list

我有以下通用类型:

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

知道为什么编译器会报错吗?是否有办法解决这个问题?

最佳答案

这是一个编译错误,因为ArrayList<Library<?>>不是 ArrayList<Library<Photo> 的父类(super class)型.您可以像这样声明数组:

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

可以在 Java nested generic type 找到详细解释。

关于java - 列表泛型类型在Java中可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27031639/

相关文章:

java - 在java中关闭MySQL数据库连接

java - 类似的命令适用于solaris sparc

java - Java 7 下的 JAXB 问题它说找不到 RI 2.1.0

android - 在 Activity 中嵌入一个大小的 ListView - android

c# - 在工厂中使用通用接口(interface)时推断类型

java - 为什么我无法从通用参数访问属性?

java - XMLless JPA 2.1 中 EntityManager 为 null

c - 函数只能运行一次 - C

android - bool java.util.List.add(java.lang.Object)

ios - 在核心数据模型上创建通用包装器是一种不好的做法吗?