Kotlin:相当于 kClass 的 getClass()

2022-08-31 08:26:59

在Java中,我们可以通过类似.在Kotlin中,我知道哪个很好,但我希望能够以类似的方式获得。我已经看到了语法,但这不是我需要的。我需要获取变量的 KClass。是否存在此类功能?getClass()something.getClass()something.javaClassKClassSomething::class


答案 1

自 Kotlin 1.1 以来,实现此目的的最简单方法是类引用语法

something::class

如果使用 Kotlin 1.0,则可以通过调用扩展属性将获得的 Java 类转换为 KClass 实例:.kotlin

something.javaClass.kotlin

答案 2

编辑:请参阅下面的评论和亚历山大的答案。这个建议最初是针对Kotlin 1.0的,现在似乎已经过时了。

由于该语言尚不支持直接获取此方法的方法,因此请考虑现在定义一个扩展方法

fun<T: Any> T.getClass(): KClass<T> {
    return javaClass.kotlin
}

val test = 0
println("Kotlin type: ${test.getClass()}")

或者,如果您更喜欢房产:

val<T: Any> T.kClass: KClass<T>
    get() = javaClass.kotlin

val test = 0
println("Kotlin type: ${test.kClass}")