You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请解释这段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:35:41