1.含义
- 在方法和属性中:this代表调用该方法和属性的对象;
- 在构造器中:this代表该构造器即将返回的对象;
- 在扩展函数或者带接收者的匿名扩展函数中:this代表“.”左边的接收者;
- 如果this没有限定符,this优先代表最内层接收者,并依次向外搜索。
2.示例
fun main() {ThisModifier().thisFun()ThisModifier().extendsMethod()}class ThisModifier {val param: Intinit {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的实例)}}
