加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

你为什么不能在Java中使用“List>”?

发布时间:2020-12-15 07:38:47 所属栏目:Java 来源:网络整理
导读:参见英文答案 Is ListDog a subclass of ListAnimal? Why are Java generics not implicitly polymorphic?????????????????????????????????????16个 在Java中,为什么以下代码行不起作用? ListListString myList = new ArrayListArrayListString(); 它可以
参见英文答案 > Is List<Dog> a subclass of List<Animal>? Why are Java generics not implicitly polymorphic?????????????????????????????????????16个
在Java中,为什么以下代码行不起作用?

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

它可以工作,如果我改为

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

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

想法?

解决方法

泛型类型更迂腐.

列表表示列表或任何子类型,但< 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读