Kotlin 通配符泛型
2020-08-12 本文已影响0人
技术客栈
简述
在日常开发当中我们经常会用到泛型,下面就Kotlin 代码泛型的使用做出记录。主要有如下两部分:
基本使用
- 泛型类
//kotlin
class ResultCallBack <T>{
}
//java
public class ResultCallBack<T>{
}
- 泛型方法
//kotlin
fun <T>onSuccess(stateCode: Int, body:T){
}
//java
public <T> onSuccess(int stateCode, T body){
}
- 泛型接口
//kotlin
interface ResultCallBack <T>{
}
// java
public interface ResultCallBack<T>{
}
泛型约束
在泛型约束主要分为 上界约束和下界约束。下面我们逐一举例
上界通配符
上界通配符通常我们使用<? extends T>
来表示。即泛型参数类型必须是T或者T的子类,用来确定类型的上限。
// java
public void systemOut(List<? extends T> list){
}
// Kotlin [ out T 等价于 ? extends T ]
fun systemOut(list : List<out T> ){
}
下界通配符
上界通配符通常我们使用<? super T>
来表示。即可以表示所有T的父类(包括T),用来确定类型的上限。
// java
public void systemIn(List<? super T> list){
}
// kotlin
// kotlin [ in T 等价于 ? super T ] 还有 [ * 等价于 ? ]
fun systemIn(list: MutableList<in T>) {
}
泛型擦除
泛型声明执行的类型安全检测仅在编译期进行, 运行时实例不保留关于泛型类型的任何信息。
// kotlin [ Any 对应 Java Object 任意类型]
fun buildRequest(param:Any){
// 第一种具体类型
if (param is Int){
}
// 第二种Array 使用 * 通配符
if (param is Array<*>){
}
}
在实际的使用过程遇到的问题,做出记录方便以后查找和加深记忆。