You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin反射获取Field强制转Map抛出ClassCastException如何解决

错误原因

getDeclaredField()方法返回的是java.lang.reflect.Field类型的字段元数据对象,仅存储字段的定义信息,并非该字段在指定实例上的实际取值,直接将其强转为Map类型自然会抛出类型转换异常。

修复方案

拿到Field对象后,需要调用其get()方法并传入目标实例,才能获取到该字段在实例上的实际值。此外由于Kotlin类的属性默认对应的底层字段(backing field)为私有访问权限,需要先设置isAccessible = true绕过权限校验。

修复后完整代码

open class Base {
    var inherited: Map<String, String> = mapOf(Pair("testing", "testing"))
}

class Child: Base() {
    var notInherited: Int = 100
}

fun main() {
    val c = Child()
    // 获取字段元数据
    val inheritedField = c.javaClass.superclass.getDeclaredField("inherited")
    // 绕过访问权限校验
    inheritedField.isAccessible = true
    // 从目标实例中读取字段实际值
    val inheritedMap: Map<String, String> = inheritedField.get(c) as Map<String, String>
    println(inheritedMap)
}

运行后输出结果为:{testing=testing}


内容的提问来源于stack exchange,提问作者Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:36:04