无法将反射场投射到地图中

Liu*_*Liu -1 java reflection kotlin

我试图将反射场投射到地图上,但它给了我这个错误:

java.lang.ClassCastException: java.lang.reflect.Field cannot be cast to java.util.Map
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

最小可重复示例:


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)
}
Run Code Online (Sandbox Code Playgroud)

链接到代码游乐场:https://pl.kotl.in/xW8g4pNsX

rzw*_*oot 5

c.javaClass.superclass.getDeclaredField("inherited")

这代表了实际的字段。全球概念。是的,您通过 到达那里c,但是您运行后c.javaClass,您已经“留下”了该实例。

您需要要求字段对象为您获取任何给定实例的值。添加.get(c)在所有这些的末尾,瞧。

使用反射来访问您在编写代码时知道其名称的事物是一个糟糕的措施 - 仅当您用尽所有其他可行选项时才应使用它。你可能想要仔细检查一些事情,可能会后退一步,询问如何做任何让你想的事情的建议:我知道!我会使用反射!- 可能会有更好的答案。