Kotlin解构声明引发类型错误:Int变量被识别为String
问题原因及解决办法
你遇到的问题是解构赋值的顺序和User数据类的属性声明顺序不匹配导致的:
- 你的User数据类属性声明顺序是:
username(String) →name(String) →location(String) → ... →avatar(Int) - 但你在解构时写的是
val (name, username, avatar) = listUser[position],这会按顺序取User的前三个属性:- 第一个变量
name拿到的是User的username(String) - 第二个变量
username拿到的是User的name(String) - 第三个变量
avatar拿到的是User的location(String)
这就完全和你预期的变量对应关系错位了,所以avatar才会被识别成String类型。
- 第一个变量
解决办法
有两种简单的修复方式:
方式一:调整解构顺序,忽略不需要的属性
按照User类的属性顺序解构,用下划线_跳过不需要的属性:
val (username, name, _, _, _, _, _, avatar) = listUser[position]
方式二:直接通过对象访问属性(更直观,不易出错)
放弃解构赋值,直接获取User对象后访问对应属性:
val user = listUser[position] holder.imgAvatar.setImageResource(user.avatar) holder.tvName.text = user.name holder.tvUserName.text = user.username
这样就能正确获取到Int类型的avatar属性,解决类型不匹配的问题。
内容的提问来源于stack exchange,提问作者Karrax
相关产品推荐
相关产品推荐

