我尝试执行以下操作:
val a: Int? = 1
val b: Int? = 1
a?.plus(b)
但无法编译,原因是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) }
}
}
并像这样使用它:
val result = biLet(a, b) { p1, p2 -> p1 + p2 }
但是似乎很简单的事情似乎需要很多工作。有没有更简单的解决方案?
不幸的是,标准库中已经没有什么东西可以求和两个可为null的整数。
但是,您可以为可为空的operator fun
创建一个Int?
:
operator fun Int?.plus(other: Int?): Int? = if (this != null && other != null) this + other else null
然后,您可以像非空版本一样正常使用它:
val a: Int? = 2
val b: Int? = 3
val c = a + b
如果您不想为其创建函数,则始终可以使用其主体来处理两个int的可为空性。