Kotlin中的解构声明会导致类型错误

42fyovps  于 2023-04-21  发布在  Kotlin
关注(0)|答案(1)|浏览(124)

在下面的代码中,当我调用holder.imgAvatar.setImageResource(avatar)时,它说我的变量(avatar)是String,即使我已经在数据类中将其设置为Int
为什么会这样?
ListUserAdapter.kt

class ListUserAdapter(val listUser: ArrayList<User>) {
    // ...
    fun someMethod() {
        val (name, username, avatar) = listUser[position]
        holder.imgAvatar.setImageResource(avatar)
        holder.tvName.text = name
        holder.tvUserName.text = username

User.kt

@Parcelize
data class User(
    var username: String,
    var name: String,
    var location: String,
    var company: String,
    var repository: String,
    var followers: String,
    var following: String,
    var avatar:Int,
):Parcelable
n3ipq98p

n3ipq98p1#

解构声明不是基于变量名,而是基于对data classcomponentN()方法的后续调用。
我的意思是你的代码:

val (name, username, avatar) = listUser[position]

并不意味着:

val name = listUser[position].name
val username = listUser[position].username
val avatar = listUser[position].avatar

但这意味着:

val name = listUser[position].component1()
val username = listUser[position].component2()
val avatar = listUser[position].component3()

其可以理解为:

val name = listUser[position].username
val username = listUser[position].name
val avatar = listUser[position].location

因此,avatar的值从listUser[position]获得location的值。
你应该从列表中获取你需要的User的引用,并基本上自己分配值。或者你可以改变Userdata class的值的顺序。
您可以阅读 * 解构声明 * 更多here

相关问题