在 Kotlin 中,如何创建具有另一个 class/interface 所具有的所有功能的单个对象?

In Kotlin, how to create a single object that has all the features that another class/interface has?

我有一个 Deck object 有一个 Set 成员:

object Deck {
    val cardSet = mutableSetOf<Card>()
    // other useful functions here...
}

现在我可以像这样在 main() 中使用它了:

Deck.cardSet.someFunctionSetHas() // e.g. forEach, map, filter, isEmpty...

但是像下面这样使用它会更直观,这正是我想要的:

Deck.isEmpty()

如果我尝试 object Deck: Set<Card> { },IDEA 要求我手动实现一些方法(contains()containsAll()isEmpty()iterator())和 size 成员。我希望 Deck object 作为 mutableSet 变量声明如下:

val mset = mutableSetOf<Card>()

在这种情况下,我不需要手动实现这些内置方法。这是我想要 Deck object 加上我自己声明的函数的行为。

你可以这样做:

private val cardSet = mutableSetOf<Card>()
object Deck : MutableSet<Card> by cardSet {
    // other useful functions here...
}

您可以继承现有的 MutableSet 实现,例如 HashSet:

object Deck: HashSet<Card>() {
    // other useful functions here...
}

Delegation is probably the best way, as given in another answer.  But for completeness, it might be worth mentioning the java.lang.reflect.Proxy class, which can be used to create a dynamic proxy;这就是普通 Java 中完成这些事情的方式,所以当然 Kotlin/JVM 也可以这样做。