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

问题描述

我有一个 Deck objectSet 成员:

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())和 {{1} } 成员。我希望 size Deck 作为 object 变量声明如下:

mutableSet

在这种情况下,我不需要手动实现那些内置方法。这是我想要的 val mset = mutableSetof<Card>() Deck 行为,以及我自己声明的函数

解决方法

你可以这样做:

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 可能是最好的方法,如另一个答案中所述。但为了完整起见,可能值得一提的是 java.lang.reflect.Proxy 类,它可用于创建 dynamic proxy;这就是在普通 Java 中完成这些事情的方式,当然 Kotlin/JVM 也可以这样做。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...