Par*_*yes 6 java delegates kotlin
假设我有一个非常复杂的规范定义为接口:
interface Spec {
fun sayHello()
}
Run Code Online (Sandbox Code Playgroud)
并且标准实施:
class Impl(private val msg: String) : Spec {
override fun sayHello() {
println(msg)
}
}
Run Code Online (Sandbox Code Playgroud)
现在假设我想创建一个实现此规范的类并委托给一个实现,但是整个对象的生命周期中确切的委托对象是可变的.这是一个例子:
class Derived(var target: Spec) : Spec by target
Run Code Online (Sandbox Code Playgroud)
上面示例的问题是,在调用构造函数target
时,构造函数参数被设置为委托对象.然后,类直接访问该委托,而不是执行属性访问.(通过查看Kotlin生成的字节码已经证实了这一点.)
因此,即使在target
构造类之后修改了属性,代理也不会更改.
任何人都可以提供在Kotlin执行此委派的方法,而无需写出每一种方法吗?
一个理想的解决方案还允许委托给一些像lambda或其他表达式一般的东西,只要在对象的整个生命周期中需要委托时,它就会被评估并用作委托.
归档时间: |
|
查看次数: |
556 次 |
最近记录: |