有没有办法避免下一步的构造?一种检查null而不向代码添加校正的方法?我的意思是像if (variableOne == null) return一样,但是又酷又酷的koltin风格?
variableOne?.let{
// ....
variableTwo?.let {
// ...
variableThree?.let {
// ...
}
}
}发布于 2020-01-29 20:39:38
使用局部变量和智能转换。
val lVariable1 = variable1
val lVariable2 = variable2
val lVariable3 = variable3
if (lVariable1 != null &&
lVariable2 != null &&
lVariable3 != null) {
// Use local variables here
}发布于 2020-01-29 22:21:04
使用普通的旧if statements__,它是由核心的kotlin团队成员推荐的,所以在你的例子中
if(variableOne != null && variableTwo != null && variableThree != null){
//Do something
}以下是来自Kotlin in Action的相关文本
当您需要检查多个值是否为null时,可以使用嵌套的let调用来处理它们。,但在大多数情况下,这样的代码最终会相当冗长,很难理解。通常,使用正则if表达式一起检查所有值会更容易。
发布于 2020-01-29 20:34:36
不,没有很棒的方法(直到有多个接收器的函数被添加到Kotlin中)。有两个选项可以避免这种回调地狱:
if (variableOne == null) return a helper function如下所示:fun <A : Any, B : Any, C : Any> runIfNotNull(a: A?, b: B?, c: C?, block: (A, B, C) ->
Unit) {
if (a != null && b != null && c != null) block(a, b, c)
}所以你可以这样使用它:
runIfNotNull(nullableOne, nullableTwo, nullableThree) { notNullOne, notNullTwo, notNullThree ->
doSomething(notNullOne, notNullTwo, notNullThree)
}而且你必须为你需要的每一个参数创建类似的函数。
https://stackoverflow.com/questions/59966834
复制相似问题