🐤

【Kotlin】::class と ::class.java の違い

2021/05/08に公開

ふと、

::class::class.javaの違いって何?」

と思ったので、簡単ですが調べてみました。

違い

  • ::class -> Kotlinクラスの「KClass」を取得する。
  • ::class.java -> Javaクラスの「Class」を取得する。

::class

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

::class.java

  • 指定されたKClassのインスタンスに対応するJavaクラス(Class)を取得する。
// 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

ログインするとコメントできます