[java] Kotlin : KClass의 getClass ()와 동일

Java에서는 다음 getClass()과 같이 변수의 클래스를 해결할 수 있습니다 something.getClass(). Kotlin에서 something.javaClass어떤 것이 좋은지 알고 있지만 KClass비슷한 방식으로 얻을 수 있기를 원합니다 . 나는 Something::class구문을 보았지만 이것은 내가 필요한 것이 아닙니다. 변수의 KClass를 가져와야합니다. 그러한 기능이 존재합니까?



답변

Kotlin 1.1 이후이를 달성하는 가장 쉬운 방법은 클래스 참조 구문입니다 .

something::class

Kotlin 1.0을 사용하는 경우 .kotlin확장 속성 을 호출하여 얻은 자바 클래스를 KClass 인스턴스로 변환 할 수 있습니다 .

something.javaClass.kotlin


답변

편집 : 아래의 주석을 참조하고 위의 Alexander의 답변을 참조하십시오. 이 조언은 원래 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}")


답변

여기 내 해결책이 있습니다.

val TAG = javaClass.simpleName

javaClass.simpleName을 사용하면 클래스 이름을 얻을 수 있습니다. 또한 위의 예제는 Android 개발자가 로깅 목적으로 클래스 위에 인스턴스 변수로 선언하는 데 매우 유용합니다.


답변

다음은 클래스 이름을 얻기위한 다양한 구현입니다. 요구 사항에 따라 활용할 수 있습니다.

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
}


답변