我試圖將投射反射欄位轉換為 Map,但它給了我這個錯誤:
java.lang.ClassCastException: java.lang.reflect.Field cannot be cast to java.util.Map
我該如何解決?
最小可重復示例:
open class Base {
var inherited: Map<String, String> = mapOf(Pair("testing", "testing"))
}
class Child: Base() {
var notInherited: Int = 100
}
fun main() {
val c = Child()
var inheritedMap: Map<String, String> = c.javaClass.superclass.getDeclaredField("inherited") as Map<String, String>
println(inheritedMap)
}
代碼游樂場鏈接:https : //pl.kotl.in/xW8g4pNsX
uj5u.com熱心網友回復:
c.javaClass.superclass.getDeclaredField("inherited")
那代表了實際的領域。全球概念。是的,你是通過 到達那里的c,但是你運行了一個c.javaClass,你已經“離開”了這個實體。
您需要要求欄位物件為您獲取任何給定實體的值。.get(c)在所有這些的最后加上,瞧。
使用反射來訪問您在撰寫代碼時知道名稱的東西是一種糟糕的措施 - 只有在您已經用盡所有其他可行選項時才應該使用它。您可能想要仔細檢查一些事情,可能會退后一步并就如何做任何讓您想到的事情尋求建議:我知道!我會使用反射!- 可能會有更好的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/342584.html
上一篇:如何找到一個序列的最大數?
