请解释这段Kotlin代码中的this@A.address语法含义
拆解这段Kotlin代码,详解
this@A.address的作用 先把完整代码贴出来方便对照:
class A(val address: String) { inner class B(telephone: String) { fun printAddress() = println(this@A.address) } }
整体结构说明
这是一个典型的外部类+内部类的结构:
- 外部类
A:非常简洁,只有一个只读属性address,通过构造函数初始化。 - 内部类
B:用inner关键字修饰是关键——普通嵌套类(不带inner)无法访问外部类的成员,但内部类持有外部类实例的引用,所以能直接访问外部类的属性和方法。另外注意B的构造参数telephone没有加val/var,所以它只是构造时的临时参数,不是B类的属性。
核心重点:this@A.address到底是什么?
在Kotlin中,this默认指向当前代码所在的类实例:
- 在内部类
B的方法里,直接写this的话,指的是**B类的当前实例**。但我们要访问的是外部类A的address属性,这时候就需要用限定this表达式来明确指定。
this@A的意思就是:我要引用的是外部类A的当前实例,后面的.address就是取这个实例的address属性。
为什么必须加这个限定?
如果直接写println(address)或者println(this.address),编译器会报错——因为B类里没有定义address属性,默认this指向B实例,自然找不到这个属性。通过@A限定后,编译器就知道要去外部类A的实例里找address。
实际使用示例
给你补个调用代码,能更直观看到效果:
fun main() { // 创建外部类A的实例 val myA = A("上海市浦东新区XX大道456号") // 通过A的实例创建内部类B的实例(内部类必须依赖外部类实例才能创建) val myB = myA.B("135XXXX6789") // 调用B的方法,会打印A的address myB.printAddress() // 输出:上海市浦东新区XX大道456号 }
内容的提问来源于stack exchange,提问作者Safwen Chaieb
相关产品推荐
相关产品推荐

