【问题标题】:How to get a KClass of Array?如何获得数组的 KClass?
【发布时间】:2016-12-18 19:12:14
【问题描述】:

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

Array::class

但是,这段代码有编译错误。

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

你知道原因或解决方法吗?

【问题讨论】:

    标签: reflection kotlin


    【解决方案1】:

    在 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
    

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 1970-01-01
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 2012-02-11
      相关资源
      最近更新 更多