否则阻止多个?在kotlin中的表达

时间:2018-03-28 10:23:01

标签: android kotlin

我需要阻止下面的代码

one?.two?.three?.four?.let { } // need else block here

这种情况下是否可以使用任何表达式?

2 个答案:

答案 0 :(得分:1)

您可以使用elvis运算符。

像这样:

one?.two?.three?.four?.let {
    // if not null
} ?: run { 
    // if null
}

如果您想要null元素的呼叫阻止,则可以使用infix

infix fun Any?.ifNull(block: () -> Unit) {
    if (this == null) block()
}

one?.two?.three?.four ifNull {
    // Do anything
}

答案 1 :(得分:1)

我认为您的问题是let也可以返回一个值,因此执行第二个run块:

  • 如果原始值为空
  • 如果返回值为null(不是您想要的!)

为避免发生这种情况,您需要从Unit块中返回let

one?.two?.three?.four?.let {
    doStuff()
    Unit
} ?: run {
    doOtherStuff()
}

您还可以使用典型的if语句,而不使用?.

one?.two?.three?.four.let {
                  // ^ no ?.
    if (it == null) doStuff() else doOtherStuff()
}