我编写了以下代码来获取Array<*>
的KClass。
Array::class
但是,此代码有编译错误。
Kotlin:Array类文字需要一个类型参数,请在尖括号中指定一个
您知道原因或解决方案吗?
答案 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