最佳答案
假设我们有这样的代码:
class QuickExample {
fun function(argument: SomeOtherClass) {
if (argument.mutableProperty != null ) {
doSomething(argument.mutableProperty)
} else {
doOtherThing()
}
}
fun doSomething(argument: Object) {}
fun doOtherThing() {}
}
class SomeOtherClass {
var mutableProperty: Object? = null
}
与 Java 不同,在 Java 中,您可以独自担心运行时的 null 解引用问题,而这种方法不能编译——这是正确的。当然,mutableProperty
在“ if”中可能不再为空。
我的问题是怎么处理这件事最好?
有几种选择是显而易见的。在不使用任何新的 Kotlin 语言特性的情况下,最简单的方法显然是将值复制到一个方法范围的值,这个值不会随后改变。
还有这个:
fun function(argument: SomeOtherClass) {
argument.mutableProperty?.let {
doSomething(it)
return
}
doOtherThing()
}
这有一个明显的缺点,那就是您需要尽早返回,否则就会避免执行后续的代码——在某些小的上下文中是可以的,但是有点问题。
还有一种可能:
fun function(argument: SomeOtherClass) {
argument.mutableProperty.let {
when {
it != null -> {
doSomething(it)
}
else -> {
doOtherThing()
}
}
}
}
但是,虽然它的目的更加明确,但可以说它比 Java 风格的处理方式更加笨拙和冗长。
我是否遗漏了什么,有没有一个更好的习语来实现这一点?