🐤
【Kotlin】::class と ::class.java の違い
ふと、
「::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>
参考
-
実行時にオブジェクトの情報を参照して、その情報にさらに変更を加える方法。 ↩︎
Discussion