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