Java Kotlin:相当于KClass的getClass()
在Java中,我们可以通过Java Kotlin:相当于KClass的getClass(),java,class,kotlin,Java,Class,Kotlin,在Java中,我们可以通过getClass()像something.getClass()一样解析变量的类。在Kotlin中,我知道something.javaClass,这很好,但我希望能够以类似的方式获得KClass。我见过Something::class语法,但这不是我需要的。我需要得到一个变量的KClass。这种功能存在吗?实现这一点最简单的方法,因为Kotlin 1.1是: 如果使用Kotlin 1.0,则可以通过调用.Kotlin扩展属性将获得的Java类转换为KClass实例: so
getClass()
像something.getClass()
一样解析变量的类。在Kotlin中,我知道something.javaClass
,这很好,但我希望能够以类似的方式获得KClass
。我见过Something::class
语法,但这不是我需要的。我需要得到一个变量的KClass。这种功能存在吗?实现这一点最简单的方法,因为Kotlin 1.1是:
如果使用Kotlin 1.0,则可以通过调用.Kotlin
扩展属性将获得的Java类转换为KClass实例:
something.javaClass.kotlin
val<T: Any> T.kClass: KClass<T>
get() = javaClass.kotlin
val test = 0
println("Kotlin type: ${test.kClass}")
编辑:见下面的评论和上面Alexander的答案。这个建议最初是针对Kotlin 1.0的,现在似乎已经过时了
由于该语言还不支持直接获取此信息的方法
fun T.getClass():KClass{
返回javaClass.kotlin
}
val测试=0
println(“Kotlin类型:${test.getClass()}”)
或者,如果您更喜欢酒店:
something.javaClass.kotlin
val<T: Any> T.kClass: KClass<T>
get() = javaClass.kotlin
val test = 0
println("Kotlin type: ${test.kClass}")
val T.kClass:kClass
get()=javaClass.kotlin
val测试=0
println(“Kotlin类型:${test.kClass}”)
这是我的解决方案
val TAG = javaClass.simpleName
使用javaClass.simpleName,您可以获得类名。此外,上面的示例对于android开发人员在类顶部声明为实例变量以用于日志记录非常有用。以下是获取类名的不同实现。您可以根据需要使用它。
import kotlin.reflect.KClass
val <T : Any > T.kClassName: KClass<out T>
get() {
return javaClass.kotlin
}
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
}
在科特林:
val className = serviceClass.javaClass.name
我可以在任何地方了解something::class的实现吗?@Nishad最简单的地方就是查看生成的字节码(例如,使用
javap
)您还可以使用KClass::class
获取当前类对象。需要注意的是Something::class
返回KClass
,而Something.javaClass.kotlin
返回KClass
@SamindaPeramuna这是错误的,类返回类对象kotlin.reflect.KClass,而不是当前的类对象!要获得它,您必须使用这个::类。您可以跳过java
位,直接进入Kotlin:fun T.getClass():KClass=this::类
这个答案应该更新以反映1.1中的更改。现在可以使用someClass::class
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
}
val className = serviceClass.javaClass.name