首页 > 解决方案 > 对多个变量进行空检查

问题描述

是否可以在 Kotlin 中重新格式化这段代码,让它变得更小一些?如果 A 和 B 都不等于 null,则该函数应将 A 和 B 作为 Pair 返回。否则它应该返回 null。我的第一个想法是这样的:

private fun <A, B> zip(a: A?, b: B?): Pair<A, B>? =
    if (a != null && b != null)
        a to b
    else
        null

然后我决定使用 Elvis Operator。所以它现在看起来像这样:

private fun <A, B> zip(a: A?, b: B?): Pair<A, B>? {
    a ?: return null
    b ?: return null
    return a to b
}

但我正在寻找的是这样的:

private fun <A, B> zip(a: A?, b: B?): Pair<A, B>? = 
    // This code obviously doesn't compile but is their any way to do it similar to this?
    a, b ?: return null
    return a to b

提前致谢!

标签: kotlin

解决方案


一个相当简洁的选择是创建 Pair 然后过滤它:

(a to b).takeIf{ a != null && b != null }

但这不是很好:它有时会不必要地创建一个 Pair,并且结果类型将使 Pair 参数都可以为空,即使您知道它们不能为空。

您可以编写一个扩展函数以使其更简单。

否则,我认为你不能做得比:

if (a != null && b != null) a to b else null

它稍微长一点,但效率更高,打字更严格。


推荐阅读