【问题标题】:In Kotlin, is it possible to change delegation at Runtime?在 Kotlin 中,是否可以在运行时更改委托?
【发布时间】:2017-02-20 18:54:16
【问题描述】:

为以下代码生成的字节码在Derived 类中创建了一个private final Base $$delegate_0 字段。当可变字段b 被分配时,原始委托不会改变。

有没有办法在运行时更改委托,同时保持zero boilerplate 实现?

接口基{ 有趣的打印() } 类 BaseImpl(val x: Int) : Base { 覆盖有趣的 print() { println(x) } } class Derived(var b: Base) : Base by b 有趣的主要(参数:数组){ val b = BaseImpl(10) val 派生 = Derived(b) derived.print()// 打印 10 派生的.b = BaseImpl(20) derived.print()// 打印 10 }

样本取自文档https://kotlinlang.org/docs/reference/delegation.html 并经过编辑。

【问题讨论】:

  • 这不是你问题的答案,但也许是一个解决方案:虽然b 是一个val,derived 仍然可以是一个var。为什么不重新创建Derived()

标签: kotlin


【解决方案1】:

不,从 1.1 版开始,Kotlin 不支持此功能,但未来版本正在考虑此功能。这是由this feature request 跟踪的。

【讨论】:

    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多