Spec-Zone.ru › Kotlin 2

Рефлексия Kotlin/JS

Kotlin/JS предоставляет ограниченную поддержку API рефлексии Kotlin. Поддерживаются только следующие части API:

  • Ссылки на классы (::class)

  • KType и typeof()

  • KClass и createInstance()

Ссылки на классы

Синтаксис ::class возвращает ссылку на класс экземпляра или класс, соответствующий заданному типу. В Kotlin/JS значением выражения ::class является урезанная реализация KClass, поддерживающая только следующие элементы:

  • Элементы simpleName и isInstance().

  • Функции-расширения cast() и safeCast().

Кроме того, можно использовать KClass.js, чтобы получить экземпляр JsClass, соответствующий классу. Сам экземпляр JsClass является ссылкой на функцию-конструктор. Это можно использовать для взаимодействия с функциями JS, которым нужна ссылка на конструктор.

KType и typeOf()

Функция typeof() создает экземпляр KType для заданного типа. API KType полностью поддерживается в Kotlin/JS, за исключением частей, специфичных для Java.

KClass и createInstance()

Функция createInstance() из интерфейса KClass создает новый экземпляр указанного класса. Это полезно для получения ссылки на класс Kotlin во время выполнения.

Пример

Вот пример использования рефлексии в Kotlin/JS.

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"
}
21 мая 2024 г.
Модули JavaScriptТипобезопасный HTML DSL

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/js-reflection.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API