我如何将实现委托给Kotlin中的可变属性?

至于我的理解,在Kotlin中委托一个实现的想法是避免看起来像这样的代码:

class MyClass(val delegate : MyInterface) : MyInterface { override fun myAbstractFun1() = delegate.myAbstractFun1() override fun myAbstractFun2() = delegate.myAbstractFun2() // ... } 

相反,我们可以写下面的代码,它应该这样做:

 class MyClass(val delegate : MyInterface) : MyInterface by delegate 

现在,我想delegate是一个可变的variables,即我的代码如下所示:

 var delegate : MyInterface = MyImplementation() object MyObject : MyInterface by delegate 

所以,如果我像第一个例子一样委托每个抽象方法来delegate自己的delegate那么改变delegate的值确实会改变方法的行为。 但是,上面的代码编译为这个Java代码:

 public final class MyObject implements MyInterface { public static final MyObject INSTANCE; // $FF: synthetic field private final MyInterface $$delegate_0 = MyObjectKt.access$getDelegate$p(); @NotNull public String myAbstractFun1() { return this.$$delegate_0.myAbstractFun1(); } @NotNull public String myAbstractFun2() { return this.$$delegate_0.myAbstractFun2(); } } 

很显然,不是只使用delegate字段,Kotlin编译器决定在创建MyObject时将其复制到最后一个字段$$delegate_0 ,当我更改delegate

有没有更好的解决方案,而不是手动委派每个方法?