W Javie możemy rozwiązać klasę zmiennej za pomocą getClass()
like something.getClass()
. W Kotlinie zdaję sobie sprawę, something.javaClass
co jest fajne, ale chcę mieć KClass
to samo. Widziałem Something::class
składnię, ale to nie jest to, czego potrzebuję. Potrzebuję KClass zmiennej. Czy taka funkcjonalność istnieje?
94
javap
)KClass::class
aby pobrać bieżący obiekt klasy.something::class
powraca,KClass<out Something>
gdysomething.javaClass.kotlin
zwracaKClass<Something>
EDYCJA: Zobacz komentarze poniżej i odpowiedź Aleksandra powyżej. Ta rada była pierwotnie dla Kotlin 1.0 i wydaje się, że jest już nieaktualna.
Ponieważ język nie obsługuje jeszcze bezpośredniego sposobu uzyskania tego, rozważ na razie zdefiniowanie metody rozszerzenia .
fun<T: Any> T.getClass(): KClass<T> { return javaClass.kotlin } val test = 0 println("Kotlin type: ${test.getClass()}")
Lub, jeśli wolisz nieruchomość:
val<T: Any> T.kClass: KClass<T> get() = javaClass.kotlin val test = 0 println("Kotlin type: ${test.kClass}")
źródło
java
kawałek i iść prosto Kotlin:fun<T: Any> T.getClass(): KClass<out T> = this::class
someClass::class
Oto moje rozwiązanie
val TAG = javaClass.simpleName
Dzięki javaClass.simpleName możesz uzyskać nazwę swojej klasy. Powyższy przykład jest również bardzo przydatny dla programistów Androida, aby zadeklarować na szczycie klasy jako zmienną instancji do celów logowania.
źródło
Oto różne implementacje do pobierania nazw klas. Możesz go wykorzystać zgodnie ze swoimi wymaganiami.
import kotlin.reflect.KClass val <T : Any > T.kClassName: KClass<out T> get() { return javaClass.kotlin }
Tutaj możemy uzyskać nazwę klasy w kotlin
val <T : Any > T.classNameKotlin: String? get() { return javaClass.kotlin.simpleName }
Tutaj możemy uzyskać nazwę klasy w kotlin
val <T : Any > T.classNameJava: String get() { return javaClass.simpleName }
Oto wyniki następujących operacji.
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 }
źródło