java - 无法将反射场投射到地图中
问题描述
我试图将反射场投射到地图,但它给了我这个错误:
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)
在所有这些的末尾添加,瞧。
在编写代码时使用反射来访问您知道名称的事物是一种不好的措施 - 只有在您用尽所有其他可行选项时才应该使用它。您可能需要仔细检查一些事情,可能会后退一步并就如何做任何让您想到的事情寻求建议:我知道!我会用反射!- 可能会有更好的答案。
推荐阅读
- c++ - 使用朋友方法时出现奇怪的链接错误
- python - 根据最大和最小范围内的项目值拆分字典列表
- bash - 编辑全局变量并返回它(或静态变量)
- keystonejs - 如何在 Keystone 5 中为我的列表检索嵌套值
- html - Z-index 适用于静态位置,为什么?
- docker - 在主机和容器之间共享 /tmp 文件夹
- .net - Application Insights 请求遥测中如何测量请求的持续时间?
- ios14 - iOS 14 getAllVoiceShortcuts 返回 LaunchServices 错误
- postgresql - 如何将整个表备份到单个字段项中?
- excel - 是否可以动态转换单元格字符串中的数字?