Nos*_*tap 29 java list arraylist
在Java中,为什么以下代码行不起作用?
List<List<String>> myList = new ArrayList<ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)
它可以工作,如果我改为
List<ArrayList<String>> myList = new ArrayList<ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)
起初,我想也许你不能有一个界面列表,但我可以创建一个List<Runnable>很好的.
想法?
Pet*_*rey 43
泛型类型更迂腐.
List是指List或任何子类型,但<List>仅指List.如果你想要一个你需要的子类型<? extends List>
我怀疑你可以使用
List<List<String>> myList = new ArrayList<List<String>>();
Run Code Online (Sandbox Code Playgroud)
你不能这样做的原因是你可以使用对引用的引用,并且需要额外的间接级别,你必须要小心.
// with one level of indirection its simple.
ArrayList alist = new ArrayList();
List list = aList; // all good
list = new LinkedList(); // alist is still good.
Run Code Online (Sandbox Code Playgroud)
使用泛型,你可以有两个级别的间接,这可以给你带来问题,所以他们更迂腐,以避免这些问题.
// 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
Run Code Online (Sandbox Code Playgroud)
版画
Exception in thread "main" java.lang.ClassCastException: java.util.LinkedList
cannot be cast to java.util.ArrayList
Run Code Online (Sandbox Code Playgroud)
让我们从这开始:
ArrayList<ArrayList<String>> myList = new ArrayList<ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)
这是创建一个ArrayList,其元素是ArrayLists.
现在假设我们可以分配给它
List<List<String>> myList2 = myList.
Run Code Online (Sandbox Code Playgroud)
现在,我们应该能够这样做:
myList2.add(new LinkedList<String>());
Run Code Online (Sandbox Code Playgroud)
但这意味着我们已经将一个LinkedList添加到一个列表中,该列表的元素应该是ArrayLists.哎呀!
在现实中,分配myList给myList2不合法......并确保它是不可能加错了那种List<String>给ArrayList<ArrayList<String>>对象.(没有彼得,这不仅仅是迂腐:-))
| 归档时间: |
|
| 查看次数: |
39428 次 |
| 最近记录: |