如何在kotlin中反射设置委托属性值?

我的实体类:

class User : ActiveRecord<User>() { var name by Column(String.javaClass); var id by Column(Int.javaClass); } 

现在我想通过反思设置名字值:

  var clazz = User().javaClass var record = clazz.newInstance() var field = record.getDeclaredField(it + "$" + "delegate") field.set(record,"aa") 

然后错误:

 entity.Column field ActiveRecord4k.User.name$delegate to java.lang.String 

如何做到这一点? TY!

如果你想反射性地设置属性,就好像它是record.name = "..." ,那么你可以使用Kotlin反射API(见参考 )。

使用kotlin-reflect ,设置属性值是这样完成的:

 val property = outputs::class.memberProperties.find { it.name == "name" } if (property is KMutableProperty<*>) { property.setter.call(record, "value") } 

如果该财产被委托,则该呼叫将被分派给该委托人。

或者,你可以用Java反射来做到这一点,首先找到你的财产的二传手:

 var setter = clazz.getDeclaredMethod("set" + it.capitalize()) setter.invoke(record, "aa") 

但至少在这一点上,没有办法覆盖该属性的委托实例,因为存储它的字段name$delegatefinal