Kotlin的class级代表团
特性代表在文档中描述,并没有问题。 但是class级代表团呢?
class FrameWorkClass // Third party class we cannot modify class MyDerivedFrameWorkClass(c:FrameWorkClass) : FrameWorkClass by c
在不修改FrameWorkClass的情况下实现这一点的最好方法是什么? 显然我们无法实现我们的界面。
您只能将接口委托给实现该接口的variables。 你不能直接委托给另一个class级。 @Damian指出, 基本上简化为:
interface Framework {} class FrameWorkImpl: Framework {} class MyDerivedFrameWorkClass(val fw: FrameWorkImpl) : Framework by fw {}
或者你可以一般地说:
class MyDerivedFrameWorkClass(val fw: Framework) : Framework by fw {}
接受框架接口的任何实现并委托给它,所以FrameworkImpl
和FrameworkHappyDays
都可以在它们实现Framework
接口的情况下工作。
这被更新为当前的Kotlin,其中trait
已经被重命名为interface
目前只有特质可以这样委托。 如果你有一个你想要授权的类,那么我会简单地把这个类提取出来,并且提取一个特征(接口),包括你感兴趣的所有方法。下面是一个基于你的代码的例子。
想象一下你有这些类:
class FrameWorkClass { fun foo() {} fun boo() {} } class MyDerivedFrameWorkClass(c:FrameWorkClass) : FrameWorkClass by c
它不正确的编译? 假设你对foo()
感兴趣,
trait FrameWorkTrait { fun foo() {} } class FrameWorkClassImpl: FrameWorkTrait { override fun foo() {} fun boo() {} } class MyDerivedFrameWorkClass(c:FrameWorkTrait) : FrameWorkTrait by c
至少我是这样做的。