Kotlin 中的类委托

nai*_*ixx 2 kotlin

特质委托在文档中进行了描述,没有任何问题。但是班级委托呢?

class FrameWorkClass // Third party class we cannot modify
class MyDerivedFrameWorkClass(c:FrameWorkClass) : FrameWorkClass by c
Run Code Online (Sandbox Code Playgroud)

在不修改 FrameWorkClass 的情况下实现此目的的最佳方法是什么?显然我们无法让它实现我们的接口。

Jay*_*ard 5

您只能将接口委托给实现该接口的变量。您不能直接委托给另一个类。正如@Damian 所指出的;基本上可以简化为:

interface Framework {}
class FrameWorkImpl: Framework {}
class MyDerivedFrameWorkClass(val fw: FrameWorkImpl) : Framework by fw {}
Run Code Online (Sandbox Code Playgroud)

或者你可以笼统地说:

class MyDerivedFrameWorkClass(val fw: Framework) : Framework by fw {}
Run Code Online (Sandbox Code Playgroud)

接受 Framework 接口的任何实现并委托给它,因此如果它们实现了该接口,FrameworkImpl则两者都可以工作。 FrameworkHappyDaysFramework

这已更新为当前的 Kotlin,trait已重命名为interface