在 Kotlin 中对两个可为空的 Int 求和的最易读方法是什么?

Die*_*rin 2 nullable kotlin

我尝试执行以下操作:

val a: Int? = 1
val b: Int? = 1

a?.plus(b)
Run Code Online (Sandbox Code Playgroud)

但它不会编译,因为plus需要一个Int.

我还尝试创建一个 biLet 函数:

fun <V1, V2, V3> biLet(a: V1?, b: V2?, block: (V1, V2) -> V3): V3? {
    return a?.let {
        b?.let { block(a, b) }
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

val result = biLet(a, b) { p1, p2 -> p1 + p2 }
Run Code Online (Sandbox Code Playgroud)

但对于看似简单的事情来说,似乎需要做很多工作。有没有更简单的解决方案?

Gio*_*oli 9

不幸的是,标准库中没有任何东西可以对两个可为空的整数求和。

但是,您可以做的是operator fun为可空创建一个Int?

operator fun Int?.plus(other: Int?): Int? = if (this != null && other != null) this + other else null
Run Code Online (Sandbox Code Playgroud)

然后,您可以像非空版本一样正常使用它:

val a: Int? = 2
val b: Int? = 3
val c = a + b
Run Code Online (Sandbox Code Playgroud)

如果你不想为它创建一个函数,你总是可以使用它的主体来处理两个整数的可空性。


Ani*_*ahu 8

嗯,对我来说这个看起来更具可读性,

val result = if (a != null && b != null) a+b else null
Run Code Online (Sandbox Code Playgroud)

当一个为空时,另一个不为空,而您只想要非空值,那么可能像这样:

val result = (a?:0)+(b?:0)
Run Code Online (Sandbox Code Playgroud)