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的實例)
}
}