如何获得KClass数组?

mmo*_*iro 7 reflection kotlin

我写了下面的代码来获得一个KClass Array<*>.

Array::class
Run Code Online (Sandbox Code Playgroud)

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

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

你知道原因还是解决方案?

hot*_*key 10

在JVM平台,科特林Array<T>类型映射到Java数组,它不同于Java的泛型类型,也不受类型擦除,他们正在具体化来代替.

除其他外,它意味着具有不同元素类型的数组由具有不同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[]
Run Code Online (Sandbox Code Playgroud)

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

val c = Array<Int>::class

println(c.java.isArray) // true
Run Code Online (Sandbox Code Playgroud)