从 Kotlin 1.3.40 开始,你可以使用实验函数typeOf<T>()
来获取KType
任意类型的:
val int: KType = typeOf<Int>()
与 相比T::class.createType()
,这支持嵌套的泛型参数:
val listOfString: KType = typeOf<List<String>>()
typeOf<T>()
当您想KType
从具体类型参数中获取 a 时,该函数特别有用:
inline fun <reified T> printType() {
val type = typeOf<T>()
println(type.toString())
}
示例用法:
fun main(args: Array<String>) {
printType<Map<Int, String>>()
// prints: kotlin.collections.Map<kotlin.Int, kotlin.String>
}
由于此功能仍处于实验状态,因此您需要@UseExperimental(ExperimentalStdlibApi::class)
围绕使用typeOf<T>()
. 随着功能变得更加稳定(可能在 Kotlin 1.4 中),可以省略它。此外,目前它仅适用于 Kotlin/JVM,不适用于 Kotlin/Native 或 Kotlin/JS。
也可以看看: