![](/img/trans.png)
[英]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.