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

时间:2018-07-20 06:08:41

标签: inheritance kotlin singleton

我有一个object declarationobject A : BaseClass),我想创建另一个对象声明B,该对象声明继承自A的隐式类。 BaseClass是一个类,而不是一个接口。在科特林有可能吗?

2 个答案:

答案 0 :(得分:2)

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

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
}

答案 1 :(得分:0)

Kotlin 上开发时,如果需要单个,则可以使用 object 关键字代替 class < / p>

   object SimpleSingleton {
    val answer = 42;
    fun greet(name: String) = "Hello, $name!"
}

assertEquals(42, SimpleSingleton.answer)
assertEquals("Hello, world!", SimpleSingleton.greet("world"))

但是您不能从单例继承