我的Kotlin 學習之路(五)Kotlin之密封類及l(fā)et、run、apply、also、with

這一節(jié)用個小例子來理解下密封類及l(fā)et、run、apply、also、with之間的區(qū)別

Java有枚舉,Kotlin也有枚舉,但多了一個密封類,密封類就是子類有限的類


/**
 * 密封類
 */
sealed class Language{

    class Java : Language(){
        fun println(){
            println("${javaClass.name}")
        }
    }

    class Kotlin : Language(){
        fun println(){
            println("${javaClass.name}")
        }
    }

    class Python : Language(){
        fun println(){
            println("${javaClass.name}")
        }
    }

    class Swift : Language(){
        fun println(){
            println("${javaClass.name}")
        }
    }
}

定義一個類

class Programmer(val name: String,val age: Int,val language: Language){
    override fun toString(): String {
        return "$name - $age - ${language.javaClass.simpleName} engineer"
    }

    fun work(){
        println("$name codeing")
    }
}

看看 let run apply also with 有什么區(qū)別


fun main(args: Array<String>) {
    println("Hello World")

    //fun <T, R> T.let(block: (T) -> R): R = block(this)
    //可以使用it關(guān)鍵字返回實體,單入?yún)⒎祷刈詈笠恍?    val programmer1 = Programmer("John",25,Language.Kotlin())
    val ss = programmer1?.let {
        println(it.toString())
        it.work()
    }


    //fun <T, R> T.run(block: T.() -> R): R = block()
    //可以使用this關(guān)鍵字返回實體,單入?yún)⒎祷刈詈笠恍?    val programmer2 = Programmer("Aluxe",28,Language.Python())
    programmer2?.run {
        println(toString())
        this.work()
    }


    //fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
    //可以使用this關(guān)鍵字返回實體,單入?yún)o返回。方法體返回this
    val programmer3 = Programmer("Alice",21,Language.Swift())
    programmer3?.apply {
        println(this.toString())
    }.work()



    //fun <T> T.also(block: (T) -> Unit): T { block(this); return this }
    //可以使用it關(guān)鍵字返回實體,單入?yún)o返回。方法體返回this
    val programmer4 = Programmer("Chen",31,Language.Java())
    programmer4?.also {
        println(it.toString())
    }.work()



    //fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
    //可以使用this關(guān)鍵字返回實體,接收2個入?yún)?,?個入?yún)⒎祷刈詈笠恍小?    val programmer5 = Programmer("Smith",19,Language.Python())
    with(programmer5){
        println(this.toString())
        work()
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容