为什么我的kotlin哈希集没有添加元素



我是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特有的。您的代码在其他语言中也可以同样工作。