码迷,mamicode.com
首页 > 其他好文 > 详细

kotlin的this关键字

时间:2019-05-31 19:31:28      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:搜索   this关键字   with   数字   odi   inner   end   返回   类对象   

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

kotlin的this关键字

标签:搜索   this关键字   with   数字   odi   inner   end   返回   类对象   

原文地址:https://www.cnblogs.com/nicolas2019/p/10956986.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!