如何获得KClass数组?

时间:2016-12-18 09:28:18

标签: reflection kotlin

我编写了以下代码来获取Array<*>的KClass。

Array::class

但是,此代码有编译错误。

  

Kotlin:Array类文字需要一个类型参数,请在尖括号中指定一个

您知道原因或解决方案吗?

1 个答案:

答案 0 :(得分:8)

在JVM平台上,Kotlin Array<T> types映射到Java arrays,与Java通用类型不同,它不受type erasure的约束,而是reified

除其他外,它意味着具有不同元素类型的数组由具有不同Class<T>标记的不同类表示,并且这些类标记也包含有关元素类型的信息。没有泛型数组类型,但只有具有不同元素类型的数组的数组类型。

由于泛型 Array<T>不存在,您也无法使用其反射,您只能获取具有指定元素类型的数组类型的运行时类型信息:

val c = Array<Int>::class // corresponds to Java Integer[] type
val d = Array<Array<String>>::class // corresponds to Java String[][]

val e = IntArray::class // corresponds to Java int[]

如果需要检查任意类是否是数组类型,可以使用Java反射来完成:

val c = Array<Int>::class

println(c.java.isArray) // true