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

能否从Lambda属性内部访问所属父类对象?

Kotlin构造器默认Lambda中访问类实例的解决方案

不可直接通过this@Parent在构造器参数的默认Lambda中访问Parent实例——因为构造器参数初始化阶段,Parent的实例还未完成创建,此时无法引用到当前实例。

以下是几种可行的实现方式:

方案1:通过次级构造器+初始化逻辑设置Lambda

将Lambda的初始化移到实例创建完成后的阶段,此时可以正常引用this@Parent:

data class Parent(
    var lambda: () -> Unit
) {
    // 无参次级构造器
    constructor() : this({}) {
        lambda = {
            // 这里可正常访问Parent实例
            println("当前实例:$this@Parent")
        }
    }
}

方案2:修改Lambda类型,接收Parent实例作为参数

调整Lambda的签名,让它接收Parent实例作为参数,默认实现中直接使用该参数:

data class Parent(
    val lambda: (Parent) -> Unit = { parent ->
        // 通过参数访问实例
        println("当前实例:$parent")
    }
)

// 使用示例
val parent = Parent()
parent.lambda(parent)

方案3:使用lateinit延迟初始化Lambda

将Lambda声明为lateinit var,在init块中完成赋值,此时实例已创建:

data class Parent {
    lateinit var lambda: () -> Unit

    init {
        lambda = {
            println("当前实例:$this@Parent")
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:05:21