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