web-dev-qa-db-ja.com

Kotlin:KClassのgetClass()と同等

Javaでは、getClass()のようなsomething.getClass()を介して変数のクラスを解決できます。 Kotlinでは、something.javaClassはナイスですが、KClassを同様の方法で取得できるようにしたいと考えています。 Something::class構文を見てきましたが、これは必要なものではありません。変数のKClassを取得する必要があります。そのような機能は存在しますか?

70
Jire

Kotlin 1.1からこれを達成する最も簡単な方法は クラス参照構文 です。

something::class

Kotlin 1.0を使用している場合、.kotlin拡張プロパティを呼び出すことにより、取得したJavaクラスをKClassインスタンスに変換できます。

something.javaClass.kotlin
102

編集:下記のコメントを参照し、上記のアレクサンダーからの回答。このアドバイスはもともと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}")
11
dherman