Di Java kita bisa menyelesaikan kelas variabel melalui getClass()
like something.getClass()
. Di Kotlin saya tahu something.javaClass
mana yang bagus tapi saya ingin bisa mendapatkannya dengan KClass
cara yang sama. Saya telah melihat Something::class
sintaksnya tetapi ini bukan yang saya butuhkan. Saya perlu mendapatkan KClass dari variabel. Apakah fungsi seperti itu ada?
95
javap
)KClass::class
untuk mendapatkan objek kelas saat ini.something::class
pengembalianKClass<out Something>
sementarasomething.javaClass.kotlin
pengembalianKClass<Something>
EDIT: Lihat komentar, di bawah, dan jawaban dari Alexander, di atas. Saran ini awalnya untuk Kotlin 1.0 dan sekarang tampaknya sudah usang.
Karena bahasa tersebut belum mendukung cara langsung untuk mendapatkannya, pertimbangkan untuk menentukan metode ekstensi untuk saat ini .
fun<T: Any> T.getClass(): KClass<T> { return javaClass.kotlin } val test = 0 println("Kotlin type: ${test.getClass()}")
Atau, jika Anda lebih suka properti:
val<T: Any> T.kClass: KClass<T> get() = javaClass.kotlin val test = 0 println("Kotlin type: ${test.kClass}")
sumber
java
sedikit dan langsung ke Kotlin:fun<T: Any> T.getClass(): KClass<out T> = this::class
someClass::class
Inilah solusi saya
val TAG = javaClass.simpleName
Dengan javaClass.simpleName Anda bisa mendapatkan nama kelas Anda. Juga contoh di atas sangat berguna bagi pengembang android untuk mendeklarasikan di atas kelas sebagai variabel instance untuk tujuan logging.
sumber
Berikut adalah Implementasi yang berbeda untuk mendapatkan nama kelas. Anda dapat menggunakannya sesuai kebutuhan Anda.
import kotlin.reflect.KClass val <T : Any > T.kClassName: KClass<out T> get() { return javaClass.kotlin }
Di sini kita bisa mendapatkan nama kelas di kotlin
val <T : Any > T.classNameKotlin: String? get() { return javaClass.kotlin.simpleName }
Di sini kita bisa mendapatkan nama kelas di kotlin
val <T : Any > T.classNameJava: String get() { return javaClass.simpleName }
Berikut adalah keluaran dari operasi berikut.
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 }
sumber