Kotlin:KClass的getClass()等价物

Jir*_*ire 74 java class kotlin

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

Ale*_*lov 109

自Kotlin 1.1以来实现这一目标的最简单方法是类参考语法:

something::class
Run Code Online (Sandbox Code Playgroud)

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

something.javaClass.kotlin
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用 `KClass::class` 来获取当前类对象。 (2认同)
  • @SamindaPeramuna 这是错误的, KClass::class 返回类对象 kotlin.reflect.KClass 而不是当前类对象!要获得它,您必须使用 this::class。 (2认同)

Kas*_*aar 12

这是我的解决方案

val TAG = javaClass.simpleName
Run Code Online (Sandbox Code Playgroud)

使用 javaClass.simpleName 您可以获得您的类名。另外,上面的示例对于 Android 开发人员在类顶部声明为用于日志记录目的的实例变量非常有用。


dhe*_*man 10

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

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

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

val test = 0
println("Kotlin type: ${test.getClass()}")
Run Code Online (Sandbox Code Playgroud)

或者,如果您喜欢房产:

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

val test = 0
println("Kotlin type: ${test.kClass}")
Run Code Online (Sandbox Code Playgroud)