Kotlin-this略有不同

本文介绍了Kotlin中`this`关键字的使用,特别是在作用域和标签引用上的特点。默认情况下,`this`指向最内层作用域。通过标签,可以引用其他作用域的`this`,在扩展函数和内部函数中有着独特的应用。

在这里插入图片描述

前言

在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则 是指向自身

### Kotlin 编程语言中的关键字数量 Kotlin 编程语言的关键字数量根据其版本更新和语言规范的变化而略有不同。根据 Kotlin 官方文档和语言规范,截至 Kotlin 1.8 版本,Kotlin 语言中定义的关键字总数为 **63 个**。这些关键字分为以下几类: #### 保留关键字(Reserved Keywords) 这些关键字在 Kotlin 中具有特殊用途,不能用作标识符。以下是部分保留关键字列表: - `as`, `as?`, `break`, `class`, `continue`, `do`, `else`, `false`, `for`, `fun`, `if`, `in`, `infix`, `interface`, `is`, `it`, `lambda`, `object`, `package`, `return`, `super`, `this`, `throw`, `true`, `try`, `typealias`, `val`, `var`, `when`, `while`, `yield` 等。 #### 上下文相关关键字(Contextual Keywords) Kotlin 支持一些上下文相关的关键字,这些关键字在特定上下文中才具有特殊含义,例如: - `by`, `catch`, `constructor`, `delegate`, `dynamic`, `field`, `file`, `finally`, `import`, `init`, `param`, `property`, `receiver`, `setparam`, `where` 等。 #### 实验性关键字(Experimental Keywords) Kotlin 在语言演进过程中会引入一些实验性关键字,用于支持新特性,例如: - `expect`, `actual`, `sealed`, `inline`, `reified`, `tailrec`, `suspend`, `const`, `external`, `annotation`, `companion` 等。 所有这些关键字共同构成了 Kotlin 语言的核心语法结构,确保开发者能够编写类型安全、表达力强的代码。 ```kotlin // 示例:使用关键字定义一个简单的类 class Example { fun printMessage() { if (true) { println("Hello, Kotlin!") } } } ``` Kotlin 的关键字设计强调简洁性和可读性,同时避免与 Java 的关键字冲突[^3]。这种设计使得 Kotlin 在与 Java 互操作时更加灵活。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值