kotlin 泛型-协变、逆变
在java中,假设有一个泛型接口 GenericClass ,
该接口中不存在任何以 T 作为参数的方法,只是方法返回 T 类型值:
那么,在 GenericClass
为此,我们必须声明对象的类型为 GenericClass<? extends Object>,
但这是毫无意义的,因为我们可以像以前一样在该对象上调用所有相同的方法,
所以更复杂的类型并没有带来价值。
在 Kotlin 中,提供了 out 修饰符,向编译器解释这种情况。
我们可以标注GenericClass 的类型参数 T
来确保它仅从 GenericClass 成员中返回(生产),
并从不被消费。
一般原则是:当一个类 GenericClass 的类型参数 T 被声明为 out 时,
它就只能出现在 GenericClass 的成员的输出-位置,
但回报是 GenericClass (如文中的GenericClass),
可以安全地作为 GenericClass(如文中的GenericClass)的超类。
简之,他们说类 GenericClass 是在参数 T 上是协变的,
或者说 T 是一个协变的类型参数。
你可以认为 GenericClass 是 T 的生产者,而不是 T 的消费者。
out、in修饰符称为型变注解,
in得一个类型参数逆变:只可以被消费而不可以被生产。
逆变类型的一个很好的例子是 Comparable:
最后,更好的理解协变与逆变,附图如下:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
疫情之下,SaaS生态的“危”与“机”
“Hello,你在线吗?”成功取代“吃了吗?”跃升为2020年同事之间最主流的打招呼常用语;疫情之下,中国企业集体迈出了企业应用线上化的第一步:在线远程办公;国内如此巨量的企业办公需求,也让钉钉、企业微信、飞书等远程办公软件迈上了新的台阶远程办公的需求催生了OA类SaaS市场的爆发,但除OA之外,SaaS行业还有更大的发展空间。 随着中国企业数字化的持续推进,企业上云已从教育市场的起步阶段转向快速发展阶段。疫情之下,远程办公的需求引入使得小微企业和单一业务部门对SaaS的依赖度持续加强,中大型企业对SaaS接受度开始明显上升,垂直行业除智能办公、CRM和HR等通用型SaaS应用之外,政府、金融、医疗大健康和新零售等垂直行业的核心业务运营也偏向采用SaaS模式。 2020年,一场突如其来的疫情让我们看到了SaaS行业巨大的潜在市场发展空
- 下一篇
疫情结束后,会影响程序员年后找工作吗?
截止到2.19日,疫情发展已呈现下降态势,很多年前已经辞职,或者有想法的离职的朋友,大家在关心疫情好转的同时,不免担心年后找工作的事情。 那么究竟疫情会给年后找工作的求职者们带来哪些影响呢?1.整个求职周期拉长 当前这一阶段正处于肺炎疫情的爆发期,正如前几天网上传的段子,几时能动?钟南山爷爷说动才动!显然当下为了避免疫情的进一步蔓延,国家延长了假期,前面也说到过,各大企业的复工时间也拉长,自然影响企业HR的招聘计划啊,无疑这是个漫漫求职路啊。 而从正常的时间周期来看,从面试到上岗,至少需要几个星期,慢则甚至几个月,其中还不乏企业必须要走的流程,层层审核,何况搁置了的人员调动等其他工作,从面试到正式上岗,找工作除了等还是等啊,对求职者来说这是场长久拉锯战啊。 2.企业招聘需求缩减 不用说,受疫情的影响,企业原定的初八甚至初六就开始上班的,这么一耽搁,加上整个社会的国民消费经济寒冬,无论什么企业受到的影响不可估量。尤其像旅游业和餐饮业,过年这段时间本就是旺季,一年当中营业额最高的时候,全国商场的统一关门,春节档院线的相继撤档,饭店集体地低价出售肉菜,旅游业更是无人问津,一般小公司小企业哪能...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用