kotlin的this關鍵字


1.含義

  • 在方法和屬性中:this代表調用該方法和屬性的對象;
  • 在構造器中:this代表該構造器即將返回的對象;
  • 在擴展函數或者帶接收者的匿名擴展函數中:this代表“.”左邊的接收者;
  • 如果this沒有限定符,this優先代表最內層接收者,並依次向外搜索。

2.示例

fun main() {
    ThisModifier().thisFun()
    ThisModifier().extendsMethod()
}

class ThisModifier {
    val param: Int

    init {
        this.param = 3//在屬性里,this代表調用該方法對象(ThisModifier的實例)
    }

    fun thisFun() {
        println(this.param)//在方法里,this代表調用該方法對象(ThisModifier的實例)
    }
}

val extendsMethod = fun ThisModifier.() {
    //在擴展方法(或者帶接收者的匿名擴展方法)里this代表接收者
    println("擴展方法里:${this.param}")
}

3.this帶限定符

fun main() {
    val outer = ThisWithLabel()
    val inner = outer.InnerClass()
    inner.commonFun()
    outer.getOuterInstance()
}

/**
 * 定義一個類
 * 隱式標簽@ThisWithLabel
 * 數字編號一樣代表對應的輸出值一樣
 */
class ThisWithLabel {//
    /**
     * 定義一個內部類
     * 隱式標簽@InnerClass
     */
    inner class InnerClass {
        /**
         * 定義一個擴展方法
         * 隱式標簽@log
         */
        fun String.log() {
            println(this)//① this指代接收者(String字符串)
            println(this@log)//① this@log與上面一樣
        }

        /**
         * 定義一個普通方法
         * 普通方法沒有隱式標簽
         */
        fun commonFun() {
            println(this)//② this指代調用commonFun方法的對象(InnerClass的實例)
            println(this@InnerClass)//② 跟上面一樣,this@InnerClass指代調用commonFun方法的對象(InnerClass的實例)
            println(this@ThisWithLabel)//③ this@ThisWithLabel指代外部類對象(ThisWithLabel的實例)
            "擴展方法打印日志".log()//分別打印出:擴展方法打印日志  擴展方法打印日志
        }
    }

    fun getOuterInstance() {
        println(this)//③ this指代調用getOuterInstance方法的對象(ThisWithLabel的實例)
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM