Kotlin - KClass<*> 来自 KType

ser*_*0ne 9 reflection kotlin

在 Kotlin 中,我可以像这样KType从 a 中获得 a KClass<*>

Int::class.createType()
Run Code Online (Sandbox Code Playgroud)

kotlin.int

我如何做相反的事情并KClass<Int>KType代表 a 中获得kotlin.Int

Rol*_*and 7

您可以KType.classifier为此使用:

val intType : KType = Int::class.createType()
val intClassifier : KClassifier? = intType.classifier
assertEquals(Int::class, intClassifier) // true
Run Code Online (Sandbox Code Playgroud)

请注意,从 1.3.40 开始,您还可以(至少在 JVM 上)使用实验typeOf<Int>()来获取您的KType. 您可能想查看1.3.40-announcement以了解它是否对您有用。

说到 JVM:在 JVM 上,您还可以使用marstran在评论中指出的KType.jvmErasure获取实际类。

  • @series0ne,不,实现更复杂。使用`SomeType::class.createType()`,你会丢失关于`SomeType` 的类型参数和可为空性的信息。相比之下,`typeOf&lt;SomeType&gt;()` 保留了该信息,因为使用了编译器内部函数,并且类型信息在某种程度上被硬编码到字节码中。例如,看看编译器为 `typeOf&lt;MutableList&lt;Int?&gt;?&gt;()` 发出的字节码。 (4认同)