关于 kotlin 处理多个可空类型的变量的问题

2021-06-23 14:41:22 +08:00
 yazinnnn
class A
class B

val a: A? = null
val b: B? = null

fun foo(a: A, b: B) {
    println(a)
    println(b)
}

suspend fun main() {
    a?.let { b?.let { foo(a, b) } }
}

除了a?.let { b?.let { foo(a, b) } }这种形式和 if a!= null && b!= null,还有啥其他好办法吗?

现在找到一个 arrow 库可以用 option dsl 实现比较漂亮的包装

option {
	foo(a.bind(), b.bind())
}
2570 次点击
所在节点    Kotlin
5 条回复
thetbw
2021-06-23 14:53:42 +08:00
直接 if(a!=null && b!= null)不也蛮简单的吗
Kamiyu0087
2021-06-23 16:30:53 +08:00
这种我选择直接用 if
xloger
2021-06-24 10:25:14 +08:00
我觉得这种时候用 if 就是最好的方案,但如果你非要实现形如 let 的调用方式,可以自己写一个 Object? 的拓展函数实现。接收不定长的参数和一个条件为真时执行的函数。
thinkfeed
2021-06-24 10:36:04 +08:00
```kotlin
inline fun <R> notNull(vararg args: Any?, block: () -> R) = when {
args.filterNotNull().size == args.size -> block()
else -> null
}
```
可以试试这个方法
xudshen
2021-06-24 14:11:49 +08:00
arrow 的思路挺好,但是扩展函数太多了,加进来 AS 都卡了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/785309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX