gpt4 book ai didi

reflection - 如何获得数组的 KClass?

转载 作者:IT老高 更新时间:2023-10-28 13:47:24 27 4
gpt4 key购买 nike

我编写了以下代码来获得 Array<*> 的 KClass .

Array::class

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

Kotlin: Array class literal requires a type argument, please specify one in angle brackets

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

最佳答案

在 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

关于reflection - 如何获得数组的 KClass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41207060/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com