Kotlin 泛型的协变和逆变
来源:互联网 发布:国语转粤语软件 编辑:程序博客网 时间:2024/05/17 00:08
Kotlin 泛型
Kotlin 泛型的基本语法类似于 Java ,不过出于型变安全,不支持 Java 中的<? extends T>,<?super T> 通配符型变约束,而是采用类似 C# 的 in,out 用于支持协变和逆变,这同时避免了处理子类型化,父类化的问题(即Java泛型中典型的List<T> 不是 List<Object>的子类型的问题);
基本的泛型语法可以参考官方中文文档:https://www.kotlincn.net/docs/reference/
Kotlin 对于型变的支持
kotlin 使用类似 C# 泛型的方式,将型变分为协变,逆变,分别提供in,out 关键字对其进行支持;
协变(covariant:Foo<父类> = Foo<子类>)
协变为父类泛型型变为具体子类,Kotlin 提供 in 关键字,来代替 Java 中<? extends E> 的通配符语法,同时为了解决Java中泛型型变类型擦除中,所引起的类型转换安全,Kotlin 采用了 C# 的策略,即协变类型作为消费者,只能读取而不能写入;
逆变(contravariance:Foo<子类> = Foo<父类>)
逆变为子类型型变为具体父类,Kotlin 提供 out 关键字,来代替 Java 中<? super E> 的通配符语法,同样采用了 C# 的策略,逆变类型作为生产者,只能写入而不能读取;
这里使用官方中文文档中的2个例子,可以很直观地演示这个概念:
以上例子中 copy 函数为将 from 参数复制到 to 参数,from 数组作为生产者,to数组作为消费者,使用 in 确保逆变安全;
fill 函数将 value 数组填充到 dest 数组,dest 数组为消费者,value 数组为生产者,使用 out 确保协变安全;
阅读全文
0 0
- Kotlin 泛型的协变和逆变
- 泛型类型的转换,协变和逆变
- C# 泛型的协变和逆变
- C# 泛型的协变和逆变
- C# 泛型的协变和逆变
- C# 泛型的协变和逆变
- 泛型的协变,逆变
- C#的协变和逆变
- C#泛型的协变和抗变
- 泛型的逆变和抗变
- 型变的理解,逆变与协变
- 协变和逆变
- 协变和逆变
- 协变和逆变
- 协变和逆变
- asp.net 泛型的 协变与逆变
- 泛型的协变和逆变,从Java通配符说起
- iOS 关键字 及 泛型的使用 和 协变、逆变
- 2017/09/19 百度面试
- Struts 2
- 魅族手机权限开启方法6
- Kotlin 类和对象
- struct和typedef struct彻底明白了
- Kotlin 泛型的协变和逆变
- Freemarker 生成树形导航菜单(递归)
- 谈谈作为DBA我对MySQL数据库优化的理解
- recyclerView 刷新
- 关于异步fifo为什么用格雷码
- 17.9.20日报
- 块级元素与内联元素用法
- (五)Open vSwitch
- 理解Javascript_07_理解instanceof实现原理