[英]Can a field's transient property/flag be set through reflection in java?
[英]Kotlin set lazy field through Java reflection
我正在尝试在 Kotlin 中使用 Java 反射,并且我的 Kotlin 类中有以下字段:
val tree: Tree by lazy {
getTree(hashGroup, service)
}
我想通过Java反射设置这个字段,到目前为止我已经到了这一点:
val tField = transaction::class.java.getDeclaredField("tree\$delegate")
tField.isAccessible = true
tField.set(transaction, newTree)
显然这是行不通的,因为tree
字段有一个委托( tree$delegate
),它希望我将它设置为Lazy
类类型而不是Tree
类型。
我知道最简单的方法是在主类中为这个字段添加一个设置器,但我不能真正修改 API,我需要这个来进行弹性测试用例。 这甚至可能吗?
只需像往常一样创建一个Lazy<T>
实例!
如果要将其设置为常量值newTree
:
tField.set(transaction, lazyOf(newTree))
您还可以设置一个新的代码块以对其进行延迟评估:
tField.set(transaction, lazy {
Tree().apply {
// do something lazily to this tree...
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.