Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kotlin:相当于KClass的getClass()_Java_Class_Kotlin - Fatal编程技术网

Java Kotlin:相当于KClass的getClass()

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

在Java中,我们可以通过
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