为什么 Java 中不能有“List>”? [复制]

2024-01-12

在Java中,为什么下面这行代码不起作用?

List<List<String>> myList = new ArrayList<ArrayList<String>>();

如果我把它改为

List<ArrayList<String>> myList = new ArrayList<ArrayList<String>>();

起初,我想也许你不能有接口列表,但我可以创建一个List<Runnable>正好。

Ideas?


泛型类型更加迂腐。

List means List或任何子类型,但是<List>仅仅意味着List。如果你想要一个子类型,你需要有<? extends List>

我怀疑你可以使用

List<List<String>> myList = new ArrayList<List<String>>();

您不能这样做的原因是您可以使用对引用的引用,并且具有额外的间接级别,因此您必须小心。

// with one level of indirection its simple.
ArrayList alist = new ArrayList();
List list = aList; // all good
list = new LinkedList(); // alist is still good.

使用泛型,您可以有两级间接,这可能会给您带来问题,因此它们会更加迂腐地避免这些问题。

// with two levels of indirection
List<ArrayList> alist = new ArrayList<ArrayList>();
List<List> list = (List) alist; // gives you a warning.
list.add(new LinkedList()); // adding a LinkedList into a list of ArrayList!!
System.out.println(alist.get(0)); // runtime error

prints

Exception in thread "main" java.lang.ClassCastException: java.util.LinkedList
     cannot be cast to java.util.ArrayList
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Java 中不能有“List>”? [复制] 的相关文章

随机推荐