我尝试执行以下操作:
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)
但对于看似简单的事情来说,似乎需要做很多工作。有没有更简单的解决方案?
不幸的是,标准库中没有任何东西可以对两个可为空的整数求和。
但是,您可以做的是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)
如果你不想为它创建一个函数,你总是可以使用它的主体来处理两个整数的可空性。
嗯,对我来说这个看起来更具可读性,
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)
| 归档时间: |
|
| 查看次数: |
938 次 |
| 最近记录: |