繁体   English   中英

可能的Java泛型类型列表?

[英]List of a list of generic type in Java possible?

我有以下通用类型:

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>的超类型。 您可以像这样声明数组:

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

彻底解释为什么可以在Java嵌套泛型类型中找到

您可以使用以解决此问题

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

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

您必须将listTopLibrary声明为

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM