如何获得一个KClass的数组?
我写了下面的代码来获得一个KClass的Array<*>
。
Array::class
但是,这段代码有一个编译错误。
Kotlin:数组类的文字需要一个类型参数,请在尖括号中指定一个
你知道原因或解决方案吗?
在JVM平台上, Kotlin 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[]
如果你需要检查一个任意的类是否是一个数组类型,你可以用Java反射来完成:
val c = Array<Int>::class println(c.java.isArray) // true