Reflection Kotlin对内置类的反思
我正在尝试读取Kotlin中字符串的“value”字段。我不太熟悉Kotlin中的反射,所以我无法让它工作。这就是我所拥有的:Reflection Kotlin对内置类的反思,reflection,kotlin,Reflection,Kotlin,我正在尝试读取Kotlin中字符串的“value”字段。我不太熟悉Kotlin中的反射,所以我无法让它工作。这就是我所拥有的: var str: String = "Some string" val field = String::class.java.getDeclaredField("value") field.isAccessible = true println(field) // This prints "private final char[] java.lang.String.
var str: String = "Some string"
val field = String::class.java.getDeclaredField("value")
field.isAccessible = true
println(field) // This prints "private final char[] java.lang.String.value"
println(field.get(str)) // This prints [C@66d3c617
尝试将char[]强制转换为数组时,出现以下异常:
java.lang.ClassCastException: [C cannot be cast to [Ljava.lang.Character;
我做错了什么?我不确定你想要实现什么,但你可以试试这个
val value = (field.get(str) as ByteArray).toString(Charset.defaultCharset())
println(value)
在我的环境中,该字段是ByteArray,因此我将其转换为ByteArray并获得可打印版本。在您的情况下,一个简单的字符就足够了。当您
println(field)
时,您得到了一个很好的提示[C
实际上是一个字符数组。您可以像下面这样获取值:字段。获取(str)作为CharArray
。哦,这现在是有意义的。我试着将其转换为数组,显然它试图将其转换为一个角色,然后从它或其他东西生成一个数组。将其转换为CharArray效果非常好。我不知道这两个是不同的,谢谢你指出这一点。