Skip to content

Kotlin/JS のリフレクション

Kotlin/JS は、Kotlin のリフレクション APIを限定的にサポートしています。サポートされている API は以下の部分のみです:

クラス参照

::class 構文は、インスタンスのクラス、または指定された型に対応するクラスへの参照を返します。 Kotlin/JS では、::class 式の値は、以下のみをサポートする簡略化された KClass 実装となります:

これに加えて、KClass.js を使用して、クラスに対応する JsClass インスタンスにアクセスできます。 JsClass インスタンス自体は、コンストラクタ関数への参照です。 これは、コンストラクタへの参照を期待する JS 関数と相互運用するために使用できます。

KType と typeOf()

typeof() 関数は、指定された型の KType インスタンスを構築します。 KType API は、Java 固有の部分を除き、Kotlin/JS で完全にサポートされています。

KClass と createInstance()

KClass インターフェースの createInstance() 関数は、指定されたクラスの新しいインスタンスを作成します。これは、Kotlin クラスへの実行時参照を取得するのに便利です。

以下は、Kotlin/JS におけるリフレクションの使用例です。

kotlin
open class Shape
class Rectangle : Shape()

inline fun <reified T> accessReifiedTypeArg() =
    println(typeOf<T>().toString())

fun main() {
    val s = Shape()
    val r = Rectangle()

    println(r::class.simpleName) // "Rectangle" を出力
    println(Shape::class.simpleName) // "Shape" を出力
    println(Shape::class.js.name) // "Shape" を出力

    println(Shape::class.isInstance(r)) // "true" を出力
    println(Rectangle::class.isInstance(s)) // "false" を出力
    val rShape = Shape::class.cast(r) // Rectangle "r" を Shape にキャスト

    accessReifiedTypeArg<Rectangle>() // typeOf() 経由で型にアクセス。"Rectangle" を出力
}