Kotlin接口实现类HashSet元素无法持久化问题求助
问题分析与解决方案
错误原因
你在main函数里创建了两个完全独立的Supa实例:
- 第一个实例调用
later()方法后,它自己的players集合确实添加了元素 - 第二个是全新的实例,它的
players集合从未被修改,所以输出空数组
修正后的代码
interface Test { val players: HashSet<String> } class Supa: Test { override val players = hashSetOf<String>() fun later() { players.add("new player") } } fun main() { // 创建单个实例并复用 val supaInstance = Supa() supaInstance.later() println(supaInstance.players) // 输出 [new player] }
接口与集合的补充说明
- 你的接口定义符合需求:声明
val players: HashSet<String>,强制子类必须提供HashSet类型的实现,满足内存占用优化的要求。 - 子类中
override val players = hashSetOf<String>()的写法正确,每个Supa实例会初始化独立的HashSet,元素会持久化在该实例的生命周期内。 - 如果需要多个实例共享同一集合,可将
players声明为companion object内的属性,但这不符合“每个子类实现并填充自定义值”的需求,不推荐。
内容的提问来源于stack exchange,提问作者user9277283
相关产品推荐
相关产品推荐

