Kotlin-委派而不是单例继承

时间:2018-07-26 10:15:56

标签: inheritance kotlin singleton delegation

我想将一个Singleton类的功能继承到另一个Singleton中,但这是不可能的(我知道为什么)。

然后我决定尝试使用委托。编译器没有抱怨,我将只是出于好奇而看看会发生什么!
您可以在下面找到更多信息:

  1. 接口ThrottleBrakeimplementation
  2. 单例ThrottleBrakeImpl,它扩展了(implementation)上方的界面
  3. 另一个单例ElectronicThrottleBrakeImpl,它使用上面的两个,如下一个代码片段所示:

    object ElectronicThrottleBrakeImpl: ThrottleBrake by ThrottleBrakeImpl {
    
    override fun throttle(direction: String, value: Int): String {
        return ThrottleBrakeImpl.throttle(direction, value)
    }}
    

但是我想知道这是否是一个好习惯。我应该继续这样的项目还是应该找到更好的解决方案?

1 个答案:

答案 0 :(得分:1)

实际上,我使用类似的星座来具有可扩展的枚举。

enum class NonExtendable {
  A, B
}

然后变为:

object Extendables {
  object A : Extendable by ExtendableImpl()
  object B : Extendable by ExtendableImpl()
}

interface Extendable

class ExtendableImpl : Extendable

现在我可以提供一个附加的〜enum值C,如下所示:

object C : Extendable by ExtendableImpl()

而且我认为也有许多其他人将此文档记录为可扩展枚举,但是我找不到很好的来源(我在防火墙后面)作为良好实践来支持它;-)

我想知道为什么首先需要单身人士。但是,如果它们像枚举,那么我会说这种做法肯定是可以的;-)(否则我会陷入麻烦)