特质委托在文档中进行了描述,没有任何问题。但是班级委托呢?
class FrameWorkClass // Third party class we cannot modify
class MyDerivedFrameWorkClass(c:FrameWorkClass) : FrameWorkClass by c
Run Code Online (Sandbox Code Playgroud)
在不修改 FrameWorkClass 的情况下实现此目的的最佳方法是什么?显然我们无法让它实现我们的接口。
您只能将接口委托给实现该接口的变量。您不能直接委托给另一个类。正如@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
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |