Kotlin:KClass的getClass()等价物

时间:2015-09-18 15:03:35

标签: java kotlin

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

5 个答案:

答案 0 :(得分:92)

自Kotlin 1.1以来实现这一目标的最简单方法是class reference syntax

something::class

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

something.javaClass.kotlin

答案 1 :(得分:10)

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

由于语言不支持直接获取此方法,consider defining an extension method for now

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}")

答案 2 :(得分:2)

这是我的解决方法

val TAG = javaClass.simpleName

使用javaClass.simpleName可以获取您的类名称。上面的示例对于android开发人员在类顶部声明为实例变量以进行日志记录非常有用。

答案 3 :(得分:1)

以下是获取类名称的不同实现。您可以根据需要使用它。

import kotlin.reflect.KClass

val <T : Any > T.kClassName: KClass<out T>
get() {
    return javaClass.kotlin
}

在这里我们可以用kotlin获取班级名称

val <T : Any > T.classNameKotlin: String?
get() {
    return javaClass.kotlin.simpleName
}

在这里我们可以用kotlin获取班级名称

val <T : Any > T.classNameJava: String
get() {
    return javaClass.simpleName
}

以下是以下操作的输出。

fun main(){

val userAge = 0

println(userAge.kClassName) 
Output: class java.lang.Integer (Kotlin reflection is not available)

println(userAge.classNameKotlin)
Output: Int

println(userAge.classNameJava)
Output: Integer
}

答案 4 :(得分:0)

在 Kotlin 中:

val className = serviceClass.javaClass.name