0

我试图将一些对象放在 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 打印时,我们看到这是覆盖

4

2 回答 2

1

Users您只在类级别初始化了一次对象dbUsers。每次将用户添加到列表之前,您都需要创建新对象。而是在方法中移动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)
   }
}
于 2021-09-01T04:34:31.023 回答
0

看起来它list是从引用的,users并且由于users它自己每次都会更新,所以你会得到这个结果。

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

  1. 每次调用都创建一个新用户addUser,这很容易

  2. 如果您在 and 之外还有其他数据,Users您可以通过在您的类中添加一个新函数来制作您的对象的 DeepCopy,例如namephonecopy()

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)
}
于 2021-09-01T03:56:39.353 回答