博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java的泛型中,通配符可以设置上限和下限
阅读量:7256 次
发布时间:2019-06-29

本文共 768 字,大约阅读时间需要 2 分钟。

上限:<? extends T> ?是T和T的子类

下限:<? super T> ?是T和T的父类

怎么看待这个上限和下限呢 首先应该想 其实对于Java来说 <? extends T> <? super T> 是两个确定的类型,因为它不可能由你的赋值完了再确定吧。所以,对于<? extends T> 来说,集合里的元素应该是什么类型呢?应该是T类型,因为你添加的是T或者T的子类,设置为T就可以激发多态了。是了,所以你也只能从这个集合中取出T类型,因为它里面的元素本来设置的就是T类型,你赋值进去只不过是将T的子类赋值给了T,多态。但是呢,你就不能给这个集合里添加元素了,因为这个集合里元素的类型是T,假如可以添加元素,你初始化的时候初始化成T的一个子类,然后添加值的时候,却添加的另一个子类,事实上是可以添加的,因为集合元素类型是T,但里面就有了多种T的子类,好了,你初始化的时候是这个子类,你取出元素的时候肯定也想着取出的是可以给这个子类赋值的类型,但很有可能取出来的是T的另一个子类,你没法赋值,因为你允许添加另一个子类。所以一开始就禁止添加元素是对的。

<? super T>里面的元素,应该设置为什么呢?显然应该是object,因为系统不知道你会把?当成什么,所以只能设置成object,所以你取出元素的时候,取出的是object类。可不可以添加元素呢?可以,因为下限有保证,所以可以添加T和T的子类。你初始化的时候,初始化的是T的某个父类,好了,你现在取元素,你希望取出的是你初始化的那个父类,因为你只能添加T和T的子类,所以你取出的元素,肯定可以赋值给那个父类。

综上,<? extends T> 不可以添加元素,但可以取出类型为T的元素。 <? super T> 可以添加T或者T的子类,取出的一定是object类。

转载地址:http://dnkdm.baihongyu.com/

你可能感兴趣的文章
【翻译】基于 Create React App路由4.0的异步组件加载(Code Splitting)
查看>>
Redis 服务器管理相关命令
查看>>
阿里云前端周刊 - 第 13 期
查看>>
模式 - 收藏集 - 掘金
查看>>
小程序开发系类之基础部分-开发工具
查看>>
Vue.js组件中v-model的使用
查看>>
移动相关HTML设置
查看>>
解决 Android ping IPv6 地址显示 network is unreachable 的问题
查看>>
【ELK】ELK集群搭建(ElasticSearch Logstash Kinaba)
查看>>
vue.cli脚手架初次使用图文教程
查看>>
node.js
查看>>
Vue 过渡实现轮播图
查看>>
使用npm发布项目
查看>>
关于NodeJS配置HTTPS服务、阿里云申请HTTPS证书
查看>>
Shortest Distance from All Buildings
查看>>
javascript之作用域
查看>>
1.1.linux命令.概要学习
查看>>
Jupyter介绍和使用
查看>>
在2019年,如何成为更好的Node.js开发者?
查看>>
国内云计算厂商众生相:四大阵营十几家企业生存盘点
查看>>