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

Kotlin 匿名对象中如何用带标签的this替代临时变量引用自身实例

解决方案

你只需要给匿名BImpl对象的表达式手动添加自定义标签,就可以通过带标签的this直接引用该实例,无需额外定义临时变量t,修改后的代码如下:

class AImpl : A {
    override fun createB(): B {
        // 给返回的匿名BImpl对象加自定义标签@BImplInstance
        return@BImplInstance object : BImpl {
            override fun createC(): C {
                return CBuilderInstance.buildC { // this: CBuilder
                    // 直接通过自定义标签引用外层匿名BImpl实例
                    this.B = this@BImplInstance
                }
            }
        }
    }
}

class CBuilder {
    fun buildC(block: CBuilder.() -> Unit): C {
        // ...
    }
}

原理解释

Kotlin 中只有带显式标签的代码块/表达式才能通过this@标签名的形式引用对应作用域的实例。匿名对象表达式默认不会生成内置的可引用标签,因此IDE默认只会提示当前作用域的this(指向CBuilder实例)和外层类的this@AImpl,不会主动识别匿名BImpl实例的作用域。手动给匿名对象的返回表达式添加自定义标签后,就可以正常引用对应实例了。

内容的提问来源于stack exchange,提问作者Taskeren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:06:03