不能将反射字段强制转换为映射



我试图获得投射反射字段映射,但它给了我这个错误:

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

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

表示实际字段。全球概念。是的,你通过c到达那里,但是当你运行c.javaClass时,你已经"离开"了实例。

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

在编写代码时使用反射来访问您知道名称的东西是一种糟糕的措施-只有在您用尽所有其他可行选项时才应该使用它。你可能想要再检查几件事,可能会退回一步,询问如何做任何让你认为:我知道!我将使用反射!-也许会有更好的答案。

相关内容

  • 没有找到相关文章

最新更新