我需要阻止下面的代码
one?.two?.three?.four?.let {
} // need else block here
这种情况下是否可以使用任何表达式?
答案 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
块:
为避免发生这种情况,您需要从Unit
块中返回let
:
one?.two?.three?.four?.let {
doStuff()
Unit
} ?: run {
doOtherStuff()
}
您还可以使用典型的if
语句,而不使用?.
:
one?.two?.three?.four.let {
// ^ no ?.
if (it == null) doStuff() else doOtherStuff()
}