gpt4 book ai didi

reflection - 如何在 Kotlin 中获取 KType?

转载 作者:行者123 更新时间:2023-12-04 16:42:31 25 4
gpt4 key购买 nike

我正在尝试 Kotlin 中的反射功能,但我似乎无法理解如何获取 KType 值。

假设我有一个将短语映射到对象工厂的类。如果有歧义,用户可以提供 type将搜索范围缩小到仅返回该类型对象(或某些子类型)的工厂的参数。

fun mapToFactory(phrase: Phrase,
type: KType = Any::class): Any {...}
type需要接受任何东西,包括 Int ,根据我的经验,这似乎受到了一些特殊对待。默认情况下,它应该类似于 Any ,意思是“不排除任何工厂”。

如何将默认值(或任何值)分配给 type ?

最佳答案

Kotlin 1.3.40起,可以使用实验函数typeOf<T>()获取KType任何类型:

val int: KType = typeOf<Int>()

T::class.createType() 相比,这支持嵌套的泛型参数:
val listOfString: KType = typeOf<List<String>>()
typeOf<T>()当您想要获得 KType 时,该函数特别有用。从具体的类型参数:
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。

也可以看看:
  • Release announcement
  • API Doc (目前非常稀少)
  • 关于reflection - 如何在 Kotlin 中获取 KType?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42862966/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com