这一道Java高级面试题,看似容易,其实很难

摘要:北京时间20200227关于【这一道Java高级面试题,看似容易,其实很难】的具体情况和说明,让www.gzmyyl.cn新闻频道的以图文形式为您慢慢道来。

最近,在垠神的微博上,看到他出了一道关于Java的高级面试题,与各位同学分享一下,题目内容如下图:

这道题目主要是关于Java中协变与逆变的思考,先说一下运行结果,编译期会放行,运行期会抛异常:java.lang.ArrayStoreException: java.lang.Integer

正如《Effective Java》的作者所说,Java允许数组协变是Java本身的缺陷,他也没闹明白为什么要这么设计,估计是为了妥协吧。

关于Java协变与逆变的思考,我也在网上找了一些资料和自己的理解,说实话,写这篇文章确实有难度,不能保证文章的内容完全正确,欢迎各位同学指正。

# 什么是协变与逆变?

其实关于它的定义,维基百科上面讲的很详细,我就在这里简单的说一下。

逆变与协变用来描述类型转换(type transformation)后的继承关系。

其定义:如果A、B表示类型,f(⋅)表示类型转换,≤表示继承关系(比如,A≤B表示A是由B派生出来的子类)

f(⋅)是逆变(contravariant)的,当A≤B时有f(B)≤f(A)成立;

f(⋅)是协变(covariant)的,当A≤B时有f(A)≤f(B)成立;

f(⋅)是不变(invariant)的,当A≤B时上述两个式子均不成立,即f(A)与f(B)相互之间没有继承关系。

看这些概念是不是有点晦涩难懂,其实在《Thinking in Java》讲泛型那章提到一个例子挺好的说明问题的。class Fruit {}class Apple extends Fruit {}class Orange extends Fruit {}

比如,有两个类型Apple和Fruit,它们之间的关系是Apple≤Fruit,即Apple是Fruit的子类型;通过它们构造出对应的数组类型Fruit[]和Apple[],最终这对数组类型的关系是Apple[] ≤ Fruit[],即数组类型也保持着原类型之间的关系,这说明数组具有协变性。Fruit[]fruits=newApple[10];

从上面的代码,我们也可以看出:子类型的数组可以赋予父类型的数组进行使用。

接着,我们再来看看下面这句代码:fruits[0] = new Orange();//抛 java.lang.ArrayStoreException

你注意到没有,Java为了确保类型安全,必须明确知道数组内部元素的类型(声明时),而且记住这个数组类型,每次往数组里面插入新元素(运行)时,都会进行类型检测,如果不匹配,就会抛出异常:java.lang.ArrayStoreException。

到这一步,我们便能理解了垠神上面的那个代码为啥会抛异常。

# 数组为什么要设计协变?

我挺赞同文章开头那种说法,在Java SE5之前没有泛型,急需要这种设计来解决当务之急,所以才这么设计。

就比如我们常用的Arrays.equals()方法,代码如下:public static boolean equals(Object[] a, Object[] a2) { if (a==a2) return true; if (a==null || a2==null) return false; int length = a.length; if (a2.length != length) return false; for (int i=0; i

由于没有泛型,所以把数组这么设计,来进行妥协,让多态的作用发挥出来,所以,是不是缺陷?就需要根据具体的时间点和环境而议。

# 谈谈泛型

Java的泛型设计,确实很牛逼,可以穿梭于协变、逆变与不变之间。ArrayList

list = new ArrayList

(); //type mismatch

上面这句代码编译时,会报错:type mismatch。由于Integer ≤ Number,而实例化的list对象是错误的,因此,默认情况下,Java的泛型是不变的。

有同学可能会问:有时需要实现逆变与协变,怎么办呢?

这时,可以使用通配符 ? 。

实现了泛型的协变,比如:List

list = new ArrayList

();

实现了泛型的逆变,比如:List

list = new ArrayList

();

那问题又来了,究竟什么时候用extends什么时候用super呢?可以参考《Effective Java》这本书,见下图:

总结一下吧:

要从泛型类取数据时,用extends;

要往泛型类写数据时,用super;

既要取又要写,就不用通配符(即extends与super都不用)。

上面这些总结很浅显,只是对Java基础知识的回顾,更深层的研究,还需要各位同学进一步深入研究。

最后,垠神希望得到更深层次的理解,我达不到那个水平,希望你能把这篇面试题转发出去,看看你身边有没有垠神期待的人才?


查看更多

实时推荐

西昌“3·30”森林火灾 事故原因正在调查
推荐 2020-04-01 11:07 343 874
武汉物流配送服务逐渐恢复
推荐 2020-04-01 11:07 164 7781
如何吃,才能预防心血管代谢疾病的发生
推荐 2020-04-01 11:07 895 5603
上市公司"逗你玩":满嘴跑火车、处处放鸽子
推荐 2020-04-01 11:07 718 5992
纽约州长:50州和联邦政府抢中国呼吸机就像竞标
推荐 2020-04-01 11:07 498 2911
清炒豆芽:在我心里,豆芽是水做的骨肉,它有着女人般的芬芳娇嫩
推荐 2020-04-01 11:07 147 9640
@济南人 餐饮堂食开放后你需要一份“吃货指南”
推荐 2020-04-01 11:07 958 814
购买服务器之前应该考虑什么?
推荐 2020-04-01 11:07 668 5859
白菜最好吃的做法,营养美味又便宜,一顿3碗米饭都不够
推荐 2020-04-01 11:07 946 5461
首趟“孝感——衡阳”包车发出
推荐 2020-04-01 11:07 758 6713
《魔域口袋版》开启英雄战纪:煮锅论英雄 跨服争巅峰 聚焦
推荐 2020-04-01 11:07 377 5095
为战而生 《奇迹:最强者》反季节宠物雪球先生上线 聚焦
推荐 2020-04-01 11:07 316 9015
放松限购、买车补贴 促进汽车消费政策“红包”来了
推荐 2020-04-01 11:07 905 4771
身高155怎么穿衣服长度
推荐 2020-04-01 11:07 730 1379
“晋”心尽力 驰援四市
推荐 2020-04-01 11:07 861 8238
中国健身气功协会推出青少版明目功
推荐 2020-04-01 11:07 183 7591
原创 周迅16岁青涩照曝光,长得灵动可爱让人过目不忘!
推荐 2020-04-01 11:07 444 8694
梦想激励前行 攀岩老将钟齐鑫:我还有潜力 还能坚持
推荐 2020-04-01 11:07 580 4515
假期超长孩子们也需心理防疫
推荐 2020-04-01 11:07 604 9793
按下复工复产“快进键”跑出满产达效“加速度”
推荐 2020-04-01 11:07 704 7902
刺激需求 Model Y后驱版或将开始投产
推荐 2020-04-01 11:07 673 9398
英伦往事:英超史上最伟大主帅,来自残疾工人家庭
推荐 2020-04-01 11:07 461 597
汾阳市人民检察院着力强化服务大局的检察担当
推荐 2020-04-01 11:07 957 5204
减税费优服务 助复产促发展
推荐 2020-04-01 11:07 979 3763
给予投保人保险合同外利益 太平洋财险青岛市分公司被罚6万
推荐 2020-04-01 11:07 584 893
曝CBA公司暂不考虑赛季取消 4月20日将再召开会议商讨重启计划
推荐 2020-04-01 11:07 797 779
治理“十乱”动真格 只为城市更美好
推荐 2020-04-01 11:07 715 3461
定西市律师行业 主动出击助力疫情防控
推荐 2020-04-01 11:07 369 8710
嘉峪关市全力打好农村新冠肺炎疫情防控阻击战
推荐 2020-04-01 11:07 624 9411
西昌森林火灾最新进展:截至4月1日9点30分西昌市共疏散人员24467人
推荐 2020-04-01 11:07 600 4683
疫情当前 泰国民众守望相助
推荐 2020-04-01 11:07 688 8696
《成化十四年》今晚开播 陈梦瑶演绎落难千金红颜劫
推荐 2020-04-01 11:07 520 7949
京津冀协同发展使河北成为京津科技成果转移转化“洼地”
推荐 2020-04-01 11:07 308 5054
金牛座和君越,明明产品力更强,为什么干不过亚洲龙?
推荐 2020-04-01 11:07 775 7955
张国荣十大银幕经典角色回顾,程蝶衣无法超越,遗作最被低估
推荐 2020-04-01 11:07 754 872
海尔卡奥斯获9.5亿元A轮融资 创工业互联网平台A轮融资规模之最
推荐 2020-04-01 11:07 493 5429
52岁陈红依旧美艳,黑色裙装秀出姣好身姿,气质高贵优雅
推荐 2020-04-01 11:07 970 8734
常德交警二大队:“四个突出”力除城区停车陋习 深入治理交通管理顽瘴痼疾
推荐 2020-04-01 11:07 310 4343
合肥专员办青年理论学习e家组织“迎春抗疫健步走”活动
推荐 2020-04-01 11:07 838 4430
被耻笑的伪豪车倒下,曾三天卖出2万辆,如今9万卖不动
推荐 2020-04-01 11:07 944 9471
韩国男神竞争!朴叙俊宋仲基刘亚仁劳模,金秀贤李敏镐恐被赶超
推荐 2020-04-01 11:07 525 7217
两名男子骑踏板“翘头”随后被交警蜀黍通知获大奖了
推荐 2020-04-01 11:07 720 2932
山西交警曝光4起酒驾醉驾典型案例
推荐 2020-04-01 11:07 679 2630
打开春天的门
推荐 2020-04-01 11:07 408 8994
美缉毒局发现地下深10米毒品隧道,设施齐全配铁路,藏毒近2千斤
推荐 2020-04-01 11:07 790 9735
真好?大众这两款车也官宣降价了!
推荐 2020-04-01 11:07 206 2305
新生男婴被弃路边 警民联合温情救助
推荐 2020-04-01 11:07 462 6579
要安全还是要续航?比亚迪刀片电池:我都要
推荐 2020-04-01 11:07 537 2757
造型风格激进 全新现代i20内饰官图发布
推荐 2020-04-01 11:07 677 3648
还在为睡不着而苦恼?半夏秫米汤帮你解决失眠问题
推荐 2020-04-01 11:07 596 1640
鸡肉煮得又嫩又滑的五大诀窍,你学会了吗?
推荐 2020-04-01 11:07 536 5764
全新大切诺基对手锁定丰田汉兰达,Jeep三款7座SUV更多信息曝光
推荐 2020-04-01 11:07 968 1072
家里有冰箱,试试这5款冰淇淋,附万能制作公式,再也不用出去买
推荐 2020-04-01 11:07 896 8423
清明期间文明祭扫倡议书
推荐 2020-04-01 11:06 265 4993
何晟铭 做自己,活得才自在
推荐 2020-04-01 11:06 722 751
薛城沙沟85岁离乡老人为家乡捐赠化肥14吨
推荐 2020-04-01 11:06 754 8330
​车市谈|三大市场全面布局 广汽本田发布三款重磅SUV车型
推荐 2020-04-01 11:06 414 6474
北京现代推出“畅享蓝天”计划 补贴最高至5万元
推荐 2020-04-01 11:06 733 2443
消除安全隐患 滕州开展路灯设施整治
推荐 2020-04-01 11:06 258 7428
这台合资SUV,为什么成为20万级最硬核的那个?
推荐 2020-04-01 11:06 721 7660
锡市16名出租车驾驶员因未佩戴安全带被处罚
推荐 2020-04-01 11:06 775 7406
华为:拿下中国移动214亿大单,诺基亚出局
推荐 2020-04-01 11:06 644 8167
你知道这些有名的家乡特产吗?
推荐 2020-04-01 11:06 855 7127
洁达环卫保洁有限公司开展市区洒水降尘作业
推荐 2020-04-01 11:06 160 3193
《神奇女侠2》新艺术海报曝光 女神飞身甩真言套索
推荐 2020-04-01 11:06 282 3086
颜值高过奥迪/操控好过宝马 这台日系后驱运动车将有大动作
推荐 2020-04-01 11:06 93 630
省会7大客运站全部恢复营运
推荐 2020-04-01 11:06 499 9274
市水利局多项措施做好抗旱工作
推荐 2020-04-01 11:06 857 5708
应对疫情影响 太原市打出稳外贸“组合拳”
推荐 2020-04-01 11:06 252 3845
我市召开各民主党派主委、驻会副主委座谈会
推荐 2020-04-01 11:06 380 7025
河北银行石家庄分行30亿元支持企业复工复产
推荐 2020-04-01 11:06 526 1934
武汉好久没吃热干面?武汉老字号美食来了
推荐 2020-04-01 11:06 406 8136
从江县提前做好汛前安全检查助推脱贫攻坚
推荐 2020-04-01 11:06 438 3005
我市最后一批支援湖北医务人员凯旋
推荐 2020-04-01 11:06 943 8328
我市加快推动“河北健康码”落地应用
推荐 2020-04-01 11:06 937 9568
我市集中签约7个重大合作项目
推荐 2020-04-01 11:06 421 556
我市工业企业铆足劲儿抢时间补损失增后劲
推荐 2020-04-01 11:06 731 8215
翼城新民路建设工程预计5月中旬完工
推荐 2020-04-01 11:06 835 8115
原创 卡米拉·卡贝洛好自信,针织吊带配阔腿裤,“矮粗”身材暴露无遗
推荐 2020-04-01 11:06 990 520
熬夜的危害到底有多大?熬夜与不熬夜,看看十年后的差距就知道了
推荐 2020-04-01 11:06 301 1916
聊城|城市“大动脉”的迎与守
推荐 2020-04-01 11:06 996 5605
这款小车续航260公里,售价才不到6万,做两个成年人一点问题没有
推荐 2020-04-01 11:06 484 9401
2020最值得入手四款蓝牙耳机,耳机控必入
推荐 2020-04-01 11:06 132 2923
白银要开展“五盯紧五整改”决战决胜脱贫攻坚大会战
推荐 2020-04-01 11:06 983 2892
战疫故事——火线入党,她们是新时代最可爱的人
推荐 2020-04-01 11:06 512 2442
由于缺少游客,泰国大象集体失业,或被迫沿街乞讨
推荐 2020-04-01 11:06 783 6457
阳光产险青岛分公司收48万罚单:虚列咨询服务费等行为违法违规
推荐 2020-04-01 11:06 149 9306
西藏这些集体和个人获“中国青年五四奖章”
推荐 2020-04-01 11:06 303 8581
西藏自治区残联召开残疾人脱贫攻坚专题会议
推荐 2020-04-01 11:06 433 3998
山西榆社及五台山森林火灾系人为引发,嫌疑人被刑拘
推荐 2020-04-01 11:06 188 2403
西藏拉萨家庭困难大学生可以开始申报资助啦
推荐 2020-04-01 11:06 393 5801
西藏计划在羌塘自然保护区建设视频监控系统
推荐 2020-04-01 11:06 481 5169
港股异动 | 新能源汽车购置补贴和免征购置税政策延长2年 赣锋锂业(01772)涨近7%
推荐 2020-04-01 11:06 686 9658
H5/HS5热卖 红旗一季度销量暴涨88%
推荐 2020-04-01 11:06 576 3790
相约再相逢,格桑花开时!内蒙古援助武汉新洲疾控队今日返程
推荐 2020-04-01 11:06 747 5805
短发男生才是今年的主流?看看“潮流教主”权志龙,你就知道了
推荐 2020-04-01 11:06 247 3683
开春外套别乱买,今年买这4款就够了,时髦遮肉又显瘦,贼高级
推荐 2020-04-01 11:06 962 2972
网上祭英烈,向不朽的英魂致敬
推荐 2020-04-01 11:06 614 6475
艾则孜种蘑菇脱贫记
推荐 2020-04-01 11:06 110 2805
朴娜莱X张度妍出演新综艺节目!计划5月播出
推荐 2020-04-01 11:06 279 9990