Kotlin-this略有不同

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wangxueming/article/details/102485370

在这里插入图片描述

前言

在Kotlin中的this相对java略有不同,主要是多了label的使用。我们来看一下


作用域

在默认情况下

this指向 最内层的包含它的作用域

引用其他作用域中的 this

需要用到label标签,指向label所在的作用域

来看个范例
class A { // 隐式标签 @A
    inner class B { // 隐式标签 @B
        fun Int.foo() { // 隐式标签 @foo
            val a = this@A // A 的 this
            val b = this@B // B 的 this

            val c = this // foo() 的接收者,一个 Int
            val c1 = this@foo // foo() 的接收者,一个 Int

            val funLit = lambda@ fun String.() {
                val d = this // funLit 的接收者
            }
            
            val funLit2 = { s: String ->
                // foo() 的接收者,因为它包含的 lambda 表达式
                // 没有任何接收者
                val d1 = this
            }
        }
    }
}
解析一下

这里foo()是对Int类的扩展函数;

范例中,用 this@标签名 的方式,将this指向了目标作用域。
这可以引用到指定的其他作用域的this

在内部函数中的this则 是指向自身

猜你喜欢

转载自blog.csdn.net/wangxueming/article/details/102485370