泛型类型更迂腐。
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
指纹
Exception in thread "main" java.lang.ClassCastException: java.util.LinkedList
cannot be cast to java.util.ArrayList