能否从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
相关产品推荐
相关产品推荐

