Kotlin 泛型

Posted 安果移不动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 泛型相关的知识,希望对你有一定的参考价值。

 基本使用。两个泛型类型处理

class MagicBox<T>(item: T) 
    private var subject: T = item
    var available = false

    //泛型作为返回类型参数
    fun fetch(): T? 
        //available 为空就返回空 不然就返回实例本身
        return subject.takeIf  available 
    

    //多泛型参数
    /**
     * 魔盒里面放的是男孩 取得时候编程男人
     */
    fun <R> fetch(subjectModFunction: (T) -> R): R? 
        return subjectModFunction(subject).takeIf  available 

    


class Boy(val name: String, val age: Int) 
class Man(val name: String, val age: Int) 

class Dog(val weight: Int)


fun main() 
    val box1 = MagicBox(Boy("Jack", 15))
    val box2 = MagicBox(Dog(20))
    box1.available = true
    box1.fetch()?.run 
        println("you find name :$name")
    

    var man = box1.fetch 
        Man(it.name, it.age.plus(15))
    
    println(man?.name)
    println(man?.age)

 

T代表type的意思

R代表retrun的意思。也可以用别的大写字母。但是这个是统一规范

泛型也可以指定父类类型 

<T : Human>
class MagicBox<T : Human>(item: T) 
    private var subject: T = item
    var available = false

    //泛型作为返回类型参数
    fun fetch(): T? 
        //available 为空就返回空 不然就返回实例本身
        return subject.takeIf  available 
    

    //多泛型参数
    /**
     * 魔盒里面放的是男孩 取得时候编程男人
     */
    fun <R> fetch(subjectModFunction: (T) -> R): R? 
        return subjectModFunction(subject).takeIf  available 

    


open class Human(val age: Int)

class Boy(val name: String, age: Int) : Human(age)
class Man(val name: String, age: Int) : Human(age)

class Dog(val weight: Int)


fun main() 
    val box1 = MagicBox(Boy("Jack", 15))
    val box2 = MagicBox(Dog(20))
    box1.available = true
    box1.fetch()?.run 
        println("you find name :$name")
    

    var man = box1.fetch 
        Man(it.name, it.age.plus(15))
    
    println(man?.name)
    println(man?.age)

指定后 如果不是父类为Human则会报错

 

以上是关于Kotlin 泛型的主要内容,如果未能解决你的问题,请参考以下文章

每天学一点 Kotlin -- 函数:泛型函数

Kotlin 中的泛型

Kotlin:从泛型集合到泛型数组

Kevin Learn Kotlin:泛型

聊一聊Kotlin的泛型

Kotlin 五 泛型 枚举