【发布时间】:2016-12-18 19:12:14
【问题描述】:
我写了下面的代码来获得Array<*>的KClass。
Array::class
但是,这段代码有编译错误。
Kotlin:数组类文字需要类型参数,请在尖括号中指定一个
你知道原因或解决方法吗?
【问题讨论】:
标签: reflection kotlin
我写了下面的代码来获得Array<*>的KClass。
Array::class
但是,这段代码有编译错误。
Kotlin:数组类文字需要类型参数,请在尖括号中指定一个
你知道原因或解决方法吗?
【问题讨论】:
标签: reflection kotlin
在 JVM 平台上,Kotlin Array<T> types 映射到 Java arrays,与 Java 泛型类型不同,它不受 type erasure 约束,而是 reified。
这意味着具有不同元素类型的数组由不同的类表示,这些类具有不同的Class<T> 标记,并且这些类标记也包含有关元素类型的信息。没有通用数组类型,只有具有不同元素类型的数组的数组类型。
由于genericArray<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
【讨论】: