如何在Kotlin中获取变量的运行时类?

4
我希望能够获得变量的运行时KClass的引用。我查看了有关类和反射的文档,但是文档似乎只解释了如何获取KClass的静态引用(例如String::class用于String)。
我需要一个变量运行时的KClass。这似乎无法编译:
fun test(x: Any) {
    val klazz = x::class
} 

如何在上面的示例中获取xKClass

你想要没有泛型信息的擦除类型,还是 KClass<T> - Jayson Minard
在这种特定的用例中,是的,擦除了没有泛型信息的类型,但也可以自由地评论泛型信息。 - Krešimir Nesek
2个回答

11

如在参考文档中所述,您可以使用.javaClass.kotlin来获取对象的KClass标记。例如:

fun printKClass(x: Any) {
    val c = x.javaClass.kotlin
    println(c)
}

如果您需要进一步操作KClass,您还应该将kotlin-reflect作为依赖项添加,因为反射功能已经从kotlin-stdlib中移除。


1

x::class 只要你的类路径中有 kotlin-reflect,就可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接