Kotlin中如何向mutableListOf添加多个对象避免元素覆盖
问题根因
你的代码全程仅创建了1个Users类实例,dbUsers类中定义的users属性是全局唯一的,每次调用addUser都是修改这个唯一实例的属性,往mutableListOf中添加的也只是该实例的引用,没有生成新对象。因此List中所有元素都指向同一块内存地址,后续修改属性自然会覆盖之前所有添加的“旧值”。
修复方案
每次调用addUser时都新建独立的Users实例,不要复用全局的同一个对象,修改后代码如下:
class Users(var phone: Int = 0, var name: String = "") // 可根据你的原有逻辑调整属性定义 class dbUsers{ val list = mutableListOf<Users>() // 移除预先添加的全局单例users fun addUser(phone: Int, name: String){ // 每次新增都创建独立的Users对象 val newUser = Users().apply { this.phone = phone this.name = name } list.add(newUser) } } fun main() { val dbAccess = dbUsers() dbAccess.addUser(8439, "Thiago") dbAccess.addUser(12312, "Maria") println(dbAccess.list[0].name) // 输出 Thiago println(dbAccess.list[1].name) // 输出 Maria }
优化建议
dbUsers类名建议遵循Kotlin命名规范,首字母大写改为DbUsers- 如果
Users类仅用来承载数据,建议定义为data class,后续判等、拷贝等操作会更便捷
内容的提问来源于stack exchange,提问作者Thiago Urubá
相关产品推荐
相关产品推荐

