我是kotlin的新手,我想创建一个抽象/开放的类或接口,可以由其他类实现。我们称之为Test
。现在Test
需要有一个HashSet(文档说它比普通集需要更少的内存(,每个派生类都将实现该HashSet并用自己的值填充。
interface Test {
val players: HashSet<String>
}
class Supa: Test {
override val players = hashSetOf<String>()
fun later() {
players.add("new player")
}
}
fun main() {
Supa().later()
println(Supa().players)
}
以上将输出[]
。似乎由于某种原因players
没有得到更新。在科特林游乐场玩耍后,我发现如果我从later()
内部打印players
,它将显示添加的元素。也许它创建了一个存在于函数范围内的播放器的新实例??有人能告诉我如何制作一个抽象的hashSet吗?派生类可以覆盖它,并用保留在该集合中的值填充它?
这里的问题是创建Supa
的两个独立实例。对其中一个调用later()
,然后打印另一个的players
。每个Supa()
创建一个新实例。
您需要将Supa
实例存储在一个变量中,并在两个位置使用它:
val supa = Supa()
supa.later()
println(supa.players)
这并不是Kotlin特有的。您的代码在其他语言中也可以同样工作。