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 {} 

接受框架接口的任何实现并委托给它,所以FrameworkImplFrameworkHappyDays都可以在它们实现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 

至少我是这样做的。