gpt4 book ai didi

kotlin - 检测具体化类型中的可空性

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

this question 中所述,您可以检测具体化类型是否包含 null:

inline fun <reified T> isTNullable() = null is T

但是,我想做一个更复杂的查询,我不确定是否可行:测试具体化类型 TPair以及它的哪些组件(如果有的话)可以为空。我想要一个具有以下属性的方法:

inline fun <reified T> nullabilityOfPairComponents(): Pair<Boolean, Boolean>?

nullabilityOfPairComponents<Int>() == null
nullabilityOfPairComponents<Pair<Int?, String>> = Pair(true, false)
nullabilityOfPairComponents<Pair<Int?, String?>> = Pair(true, true)

这可能吗?我观察到 KType s 有一个可空性组件,但我们目前似乎只能检索一个 KClass , 不是 KType , 来自具体化的类型。

请注意,我们不能使用像 <reified A, reified B, T : Pair<A, B>> 这样的技巧,因为此方法必须接受任意类型(<Int> 示例)。

最佳答案

使用实验性 API,这当然是可能的:

@OptIn(ExperimentalStdlibApi::class)
inline fun <reified T : Any> nullabilityOfPairComponents(t: T): Pair<Boolean, Boolean>? {
if (T::class.java != Pair::class.java) return null
val (t1, t2) = typeOf<T>().arguments
return Pair(
t1.type!!.isMarkedNullable,
t2.type!!.isMarkedNullable
)
}

这取决于实验性的 typeOf 方法。

关于kotlin - 检测具体化类型中的可空性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69018402/

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