编译器规定 out泛型只能读,in泛型只能写,对于开发来讲有什么积极的意义?感觉只是在增加麻烦呢

来源:9-7 小案例:泛型实现一个MVP框架

爱吃Toast

2019-06-12

老师,既然使用 @UnsafeVariance 就可以突破这个限制,为什么Kotlin编译器要限制这个事情?看不到必要性。
我觉得这种数据读写限制应该是开发人员去考虑的,比如List<out E>,不提供能修改数据的方法就行了。
反观Java中使用extends定义的协变,Java编译器不会去限制setter操作啊。

写回答

3回答

bennyhuo

2019-06-12

积极意义在于推动开发人员做出清楚的类型设计,对接口使用者赋予足够的类型约束。Java的泛型真的是太宽松了

0
2
bennyhuo
回复
爱吃Toast
客气啦~
2019-06-14
共2条回复

bennyhuo

2019-06-12

Java的泛型是有缺陷的,为了构想兼容做了很多妥协。所以java的泛型代码一般都不是很严格,以至于很多人根本搞不懂类型系统,搞不懂的结果就是乱写,出bug。

0
0

bennyhuo

2019-06-12

但多数开发人员不会考虑,所以要强制他们考虑。unsafeviariance,已经很明白了,不安全,不要轻易用。

0
0

Android首选开发语言Kotlin入门与进阶

Google I/O大会钦定Android一级开发语言,现在不学,等待何时

3122 学习 · 387 问题

查看课程