jun*_*unk 5 reflection delegates kotlin
我的实体类:
class User : ActiveRecord<User>() {
var name by Column(String.javaClass);
var id by Column(Int.javaClass);
}
Run Code Online (Sandbox Code Playgroud)
现在我想通过refelection设置名称值:
var clazz = User().javaClass
var record = clazz.newInstance()
var field = record.getDeclaredField(it + "$" + "delegate")
field.set(record, "aa")
Run Code Online (Sandbox Code Playgroud)
那么错误:
entity.Column字段ActiveRecord4k.User.name $委托给java.lang.String
这该怎么做?
hot*_*key 15
如果你想反射性地设置属性record.name = "..."
,那么你可以使用kotlin-reflect
Kotlin反射API(参见参考资料).
使用kotlin-reflect
,设置属性值如下所示:
val property = outputs::class.memberProperties.find { it.name == "name" }
if (property is KMutableProperty<*>) {
property.setter.call(record, "value")
}
Run Code Online (Sandbox Code Playgroud)
如果委托了该属性,则将调用该调用给该委托.
或者,您可以使用Java反射,首先找到属性的setter:
var setter = clazz.getDeclaredMethod("set" + it.capitalize())
setter.invoke(record, "aa")
Run Code Online (Sandbox Code Playgroud)
但是至少在这一点上,没有办法覆盖该属性的委托实例,因为存储它的字段name$delegate
是final
.
归档时间: |
|
查看次数: |
4719 次 |
最近记录: |