美文网首页
kotlin 泛型攻略

kotlin 泛型攻略

作者: 忧郁的老王 | 来源:发表于2021-02-04 17:44 被阅读0次

    基础用法

    • 在 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
        }
    

    相关文章

      网友评论

          本文标题:kotlin 泛型攻略

          本文链接:https://www.haomeiwen.com/subject/snwqtltx.html