首页 > 解决方案 > 无法将反射场投射到地图中

问题描述

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

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

标签: javakotlinreflection

解决方案


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

这代表了实际的领域。全球概念。是的,你通过 到达那里c,但是你运行的一个c.javaClass,你已经“离开”了实例。

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

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


推荐阅读