你为什么不能在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |