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) // Prints "Rectangle"
    println(Shape::class.simpleName) // Prints "Shape"
    println(Shape::class.js.name) // Prints "Shape"

    println(Shape::class.isInstance(r)) // Prints "true"
    println(Rectangle::class.isInstance(s)) // Prints "false"
    val rShape = Shape::class.cast(r) // Casts a Rectangle "r" to Shape

    accessReifiedTypeArg<Rectangle>() // Accesses the type via typeOf(). Prints "Rectangle"
}