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

Cannot cast reflection field into Map

我试图将反射场投射到 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)
}

link 代码游乐场:https://pl.kotl.in/xW8g4pNsX

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

表示实际字段。全球概念。是的,你是通过 c 到达那里的,但是你 运行 c.javaClass,你有 'left' 后面的实例。

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

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