我有一个Kotlin数据类,如下所示:
data class User(
var id: Int,
var name: String? = null,
var email: String? = null,
var age: Int? = null,
var latitude: Float? = null,
var longitude: Float? = null
)
然后创建它的示例
var user = User(1)
然后我试试这个:
val field = "name"
var prop = User::class.memberProperties.find {it -> it.name == field}!!
prop.get(user)
它是有效的,但是如果我试着这样设置值:
prop.setter.call(user, "Alex")
出现错误:
未解析的引用:装配工
它的工作原理也不是这样的:
prop.set(user, "Alex")
(This基于此处提供的解决方案,但它对我不起作用:(第10页)
3条答案
按热度按时间lskq00tm1#
memberProperties
返回一个Collection<KProperty1<T, *>>
,但是你需要KMutableProperty1
。之所以需要强制转换,是因为智能强制转换只会给予你一个
KMutableProperty1<T, *>
,而且你无论如何都不能调用set
,因为编译器不知道接受什么类型作为它的第二个参数。wwtsj6pe2#
当您获得所需对象的示例时,只需执行以下操作:user.name =“toto”
yb3bgrhw3#
如果目标是JVM平台,可以使用Java风格的反射。要将类User的用户示例的“name”属性设置为“Alex,”
要获取“name”属性,