为什么你不能在Java中有一个“List”?

在Java中,为什么下面的代码行不行?

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

如果我改变它,它可以工作

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

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

想法?

通用类型更加迂腐。

列表表示列表或任何子类型,但<列表>仅表示列表。如果你想要一个子类型,你需要有<?扩展列表>

我怀疑你可以使用

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

打印

Exception in thread "main" java.lang.ClassCastException: java.util.LinkedList
     cannot be cast to java.util.ArrayList
http://stackoverflow.com/questions/12861726/why-cant-you-have-a-listliststring-in-java

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:为什么你不能在Java中有一个“List”?