在Java中,我们可以通过getClass()
like解析变量的类something.getClass()
。在Kotlin中,我知道something.javaClass
哪个很好,但我希望能够以KClass
类似的方式获得。我已经看过Something::class
语法了,但这不是我所需要的。我需要获取变量的KClass。是否存在这样的功能?
Answers:
自Kotlin 1.1以来,最简单的方法是使用类引用语法:
something::class
如果使用Kotlin 1.0,则可以通过调用.kotlin
extension属性将获得的Java类转换为KClass实例:
something.javaClass.kotlin
javap
)
KClass::class
获取当前的类对象。
something::class
回报KClass<out Something>
,而something.javaClass.kotlin
回报KClass<Something>
编辑:请参阅下面的评论,以及上面亚历山大的回答。该建议最初是针对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}")
java
fun<T: Any> T.getClass(): KClass<out T> = this::class
someClass::class
这是我的解决方案
val TAG = javaClass.simpleName
使用javaClass.simpleName可以获取您的类名称。同样,上面的示例对于android开发人员在类顶部声明为实例变量以进行日志记录非常有用。
这是获取类名称的不同实现。您可以根据需要使用它。
import kotlin.reflect.KClass
val <T : Any > T.kClassName: KClass<out T>
get() {
return javaClass.kotlin
}
在这里我们可以得到科特林的班级名称
val <T : Any > T.classNameKotlin: String?
get() {
return javaClass.kotlin.simpleName
}
在这里我们可以得到科特林的班级名称
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
}