kotlin 泛型攻略

基础用法

  • 在 Kotlin 中使用 :代替 extends 对泛型的的类型上界进行约束。
fun <T : Number> sum(vararg param: T) = param.sumByDouble { it.toDouble() }
fun main() {
    val result1 = sum(1,10,0.6)
    val result2 = sum(1,10,0.6,"kotlin") // compile error
}
  • 为同一类型参数添加多个约束替代java中的 &的 是 where关键字
//java实现
class ClassA { }
interface InterfaceB { }
public class MyClass<T extends ClassA & InterfaceB> {
    Class<T> variable;
}

//kotlin 实现
open class ClassA
interface InterfaceB
interface InterfaceC
class Myclass<T> where T : ClassA, T : InterfaceB ,T:InterfaceC
  • in和out修饰符分别表示 该参数只能做入参或者只能做出参(返回类型)
fun main() {
    val list1:MutableList<String> = mutableListOf()
    list1.add("hello")
    list1.add("world")
    val list2:MutableList<out String> = mutableListOf()
    list2.add("hello")  // compile error
    list2.add("world")  // compile error
    val list3:MutableList<in String> = mutableListOf()
    list3.add("hello")
    list3.add("world")
    lateinit var list4:MutableList<String>
    list4 = list3;     // compile error
}
  • <*>星号投影表示不确定类型类似于java无类型通配符<?> 因为类型不确定 所以星号投影只能读取不能写入

    fun test(list:MutableList<*>) {
        list.add("s") // compile error
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. 泛型约束(Generic constraints) Kotlin 跟 Java 一样,也拥有泛型约束。Jav...
    fengzhizi715阅读 5,289评论 0 7
  • 与Java一样,Kotlin也支持泛型,为类型安全提供保证,消除类型强转的烦恼 创建类的实例时我们需要指定类型参数...
    郎官人阅读 1,244评论 0 0
  • 泛型,即 "参数化类型",将类型参数化,可以用在类,接口,方法上。与 Java 一样,Kotlin 也提供泛型,为...
    bruce1990阅读 298评论 0 0
  • 前言 本文主要介绍一下Kotlin的泛型 Java中数组的设计问题 先看一下这个代码 在编译的时候编译器不会报错,...
    取了个很好听的名字阅读 487评论 0 0
  • 写在开头:本人打算开始写一个Kotlin系列的教程,一是使自己记忆和理解的更加深刻,二是可以分享给同样想学习Kot...
    胡奚冰阅读 1,446评论 1 3