是否可以在 Kotlin 中扩展单例(对象声明)?

Spa*_*son 7 inheritance singleton kotlin

我有一个对象声明( object A : BaseClass) 并且我想创建另一个B继承自A隐式类的对象声明。BaseClass是一个类而不是一个接口。在 Kotlin 中可能吗?

Sim*_*mY4 8

您可以使用委托。请注意,您只能通过接口进行委托,因此您需要使用需要委托的方法子集创建一个接口。

interface Iface {
   fun doStuff()
}

object BaseObject: Iface {
   override fun doStuff() { }
}

class BaseClass: Iface {
   override fun doStuff() { }
}

object ExtendedObjectDelegatingToObject: Iface by BaseObject {
   fun doSomethingElse() { }
}

object ExtendedObjectDelegatingToClass: Iface by BaseClass() {
   fun doSomethingElse() { }
}

class ExtendedClassDelegatingToObject: Iface by BaseObject {
   fun doSomethingElse() { }
}

class ExtendedClassDelegatingToClass: Iface by BaseClass() {
   fun doSomethingElse() { }
}

fun example() {
    BaseObject.doStuff() // can call doStuff from BaseObject
    ExtendedObjectDelegatingToObject.doStuff() // can call doStuff from ExtendedObject
    ExtendedObjectDelegatingToObject.doSomethingElse() // can also call additional methods on ExtendedObject
}
Run Code Online (Sandbox Code Playgroud)