如何将多个对象放入 Kotlin 的 mutableListOf 中?

How to put multiple objects in a mutableListOf in Kotlin?

我试图将一些对象放入 mutableListOf,但所有对象最终都被覆盖了。

class Users {...}

class dbUsers{
var users = Users()
val list = mutableListOf(users)

fun addUser(phone: Int, name: String){
    users.phone = phone
    users.name = name
    list.add(users)
}
}

fun main() {
var dbAccess = dbUsers()
dbAccess.addUser(8439, "Thiago")
dbAccess.addUser(12312, "Maria")
println(dbAccess.list[0].name)
println(dbAccess.list[1].name)
}

当我们在位置 1 打印时,我们看到它被覆盖了

看起来 list 是从 users 引用的,因为 users 本身每次都会更新,所以你会得到这个结果。

有两种方法可以解决这个问题,

  1. 每次调用 addUser 创建一个新用户,这很简单

  2. 如果你在 Users 中有其他数据而不是 namephone ,你可以通过在你的 class copy() 喜欢

class YourClass () {

// Your class other stuffs here

  fun copy(): YourClass { //Get another instance of YourClass with the values like this!
      val json = Gson().toJson(this)
      return Gson().fromJson(json, YourClass::class.java)
  }
}

然后通过使用 yourClassObject.copy() 你将得到一个具有相同值的新实例

fun addUser(phone: Int, name: String){
    val newUsers = users.copy()
    newUsers.phone = phone
    newUsers.name = name
    list.add(newUsers)
}

您仅在 dbUsers 的 class 级别初始化了一次 Users 对象。在将用户添加到列表之前,您每次都需要创建新对象。将 users 初始化移动到方法中而不是

class dbUsers{
   
   val list = mutableListOf<Users>()

   fun addUser(phone: Int, name: String){
     var users = Users()
     users.phone = phone
     users.name = name
     list.add(users)
   }
}