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

java – 嵌套有界通配符

发布时间:2020-12-14 05:07:48 所属栏目:Java 来源:网络整理
导读:当我尝试编译下面的代码: LinkedListList? extends Number numList = new LinkedListListInteger(); 我得到一个不兼容的类型错误: Required: LinkedList java.util.list? extends java.lang.NumberFound: LinkedList java.util.listInteger 如何实现一个Li
当我尝试编译下面的代码:
LinkedList<List<? extends Number>> numList = new LinkedList<List<Integer>>();

我得到一个不兼容的类型错误:

Required: LinkedList <java.util.list<? extends java.lang.Number>>
Found: LinkedList <java.util.list<Integer>>

如何实现一个LinkedList,其中包含具有扩展Number的元素的列表的元素?

要清楚,我正在寻找以下列方式添加列表到numList:

numList.add(new LinkedList< Integer>());

解决方法

通配符捕获不会超过一个通用级别.所以虽然这样做:
LinkedList<? extends Number> test = new LinkedList<Integer>();

这不是:

LinkedList<List<? extends Number>> numList = new LinkedList<List<Integer>>();

我可以想到的最合理的解释就是将泛型看作最外层的不变量.一个LinkedList< List< Integer>>>不是LinkedList< List<?扩展Number>>尽管List< Integer>是列表<?由于与List< Dog>相同的原因,扩展了Number>不是列表<动物>即使狗是动物.这里,狗是动物列表<整数>是列出<?扩展编号>.

那么狗/动物的解决方案是?延伸:

List<? extends Animal> animals = new List<Dog>();

应用相同的推理,解决方法是另一个?延伸:

LinkedList<? extends List<? extends Number>> numList = new LinkedList<List<Integer>>();

但是,由于第一个,您将无法添加到此列表中的任何内容?延伸.引用类型变量numList不知道List的子类型扩展号>真的是它可以是ArrayList< Integer>,所以Java不能提供类似的安全性,这样的事情可以被添加到这样的LinkedList.为了保持类型的安全性,编译器将只允许添加null.您必须完全匹配通用类型参数,没有通配符:LinkedList< List< Integer>> numList = new LinkedList< List< Integer>>();.您可以添加列表<整数>到这样一个LinkedList.

(编辑:李大同)

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

    推荐文章
      热点阅读