Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reflection Kotlin对内置类的反思_Reflection_Kotlin - Fatal编程技术网

Reflection 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.

我正在尝试读取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.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效果非常好。我不知道这两个是不同的,谢谢你指出这一点。