Javaでは、getClass()
のようなsomething.getClass()
を介して変数のクラスを解決できます。 Kotlinでは、something.javaClass
はナイスですが、KClass
を同様の方法で取得できるようにしたいと考えています。 Something::class
構文を見てきましたが、これは必要なものではありません。変数のKClassを取得する必要があります。そのような機能は存在しますか?
Kotlin 1.1からこれを達成する最も簡単な方法は クラス参照構文 です。
something::class
Kotlin 1.0を使用している場合、.kotlin
拡張プロパティを呼び出すことにより、取得したJavaクラスをKClassインスタンスに変換できます。
something.javaClass.kotlin
編集:下記のコメントを参照し、上記のアレクサンダーからの回答。このアドバイスはもともと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}")