🐤

【Kotlin】::class と ::class.java の違いについて

2021/05/08に公開

::class::class.javaの違いについて気になったので、簡単ですが調べてみました。

::class

  • Kotlin のクラスの KClass を取得することが出来る
  • KClassは、クラスを表し、イントロスペクション[1]機能を提供する
  • Kotlin クラスの参照と Java クラスの参照は異なるので、Classの参照を取得するときは、::class.javaを使用する。

::class.java

  • Java クラスのClassを取得する
  • 指定されたKClassのインスタンスに対応する Java クラスを取得する

JvmClassMapping.kt

/**
 * Returns a Java [Class] instance corresponding to the given [KClass] instance.
 */
@Suppress("UPPER_BOUND_VIOLATED")
public val <T> KClass<T>.java: Class<T>
    @JvmName("getJavaClass")
    get() = (this as ClassBasedDeclarationContainer).jClass as Class<T>

参考

脚注
  1. 実行時にオブジェクトの情報を参照して、その情報にさらに変更を加える方法。 ↩︎

Discussion