Kotlin/JS 反射
Kotlin/JS provides a limited support for the Kotlin reflection API. The only supported parts of the API are:
- class references (
::class
). KType
andtypeof()
function.
Class references
The ::class
syntax returns a reference to the class of an instance, or the class corresponding to the given type.
In Kotlin/JS, the value of a ::class
expression is a stripped-down KClass
implementation that supports only:
- simpleName and isInstance() members.
- cast() and safeCast() extension functions.
除此之外,你可以使用 KClass.js 访问与 JsClass 类对应的实例。
该 JsClass
实例本身就是对构造函数的引用。
这可以用于与期望构造函数的引用的 JS 函数进行互操作。
KType and typeOf()
The typeof()
function constructs an instance
of KType
for a given type.
The KType
API is fully supported in Kotlin/JS except for Java-specific parts.
Example
Here is an example of the reflection usage in 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"
}