Kotlin对内置类的反思

时间:2018-07-09 21:20:42

标签: reflection kotlin

我正在尝试在Kotlin中读取String的“ 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 []转换为Array时,出现此异常:

java.lang.ClassCastException: [C cannot be cast to [Ljava.lang.Character;

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我不确定您要达到的目标,但是您可以尝试一下。

val value = (field.get(str) as ByteArray).toString(Charset.defaultCharset())
println(value)

在我的环境中,该字段是ByteArray,因此我将其强制转换为ByteArray并获得了可打印的版本。就您而言,一个简单的CharArray就足够了。