kotlin - 检测具体类型中的可空性
问题描述
正如在这个问题中所讨论的,您可以检测一个具体类型是否包含 null:
inline fun <reified T> isTNullable() = null is T
但是,我希望进行更复杂的查询,但我不确定这是否可行:测试具体类型T
是否为 aPair
以及其组件中的哪些(如果有)可以为空。我想要一个具有以下属性的方法:
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 有一个可空性组件,但似乎我们目前只能从具体类型中检索 a KClass
,而不是 a 。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
方法。
推荐阅读
- c# - 如何返回 IActionResult 兼容的 UnprocessableEntity - HttpStatusCode (422)
- python - 如何在不使用 Python 库的情况下从单行输入制作矩阵?
- html - 导航栏中的下拉问题 - Bootstrap
- python-3.x - 从指定目录运行python
- r - r 中的内部连接比任何一个数据框都提供更多的行
- python - 如果没有其他方法,如何制作计算器?
- flutter - 在简单布局中添加 GridView 小部件会使 Flutter 应用程序崩溃
- kotlin - 通用接口的扩展函数
- ubuntu - Draw Directly To The 24 Bit TFT Display Using Cairo
- android - Possible to make accessibility announcement on Android independent of UI control?