我使用 Kotlin 来编写 Android 应用程序。为了空指针安全,需要检查所有引用是否都是非空的。然而,如果只有一个为空,那么我们应该通知用户出了问题。
以简洁易读的方式进行编程对我来说很重要。
我正在寻找一个简短且易于理解的解决方案。
标准方法是:
if (b != null && a != null && c !=null ...) println ("everything ok.")
else println("Something went wrong")
这里有一个简洁的条件写法:
listOf(a, b, c).any { it == null }
在上下文中,您可以这样使用它:
println(if (listOf(a, b).any { it == null })) "Something went wrong"
else "Everything ok.")
您可以使用 Elvis 运算符
?:
,它允许在值为 null 的情况下提供默认值(包括从函数返回)。
例如:
fun foo(a: Int?, b: String?, c: Boolean?) : String? {
a ?: return null
b ?: return null
c ?: return null
return "Everything ok."
}
这种方法的优点是,根据哪个值为空,您可能会得到不同的错误结果:
使用异常:
fun foo(a: Int?, b: String?, c: Boolean?) : String {
a ?: throw IllegalArgumentException("a is null")
b ?: throw IllegalArgumentException("b is null")
c ?: throw IllegalArgumentException("c is null")
return "Everything ok."
}
使用不同的返回值:
fun foo(a: Int?, b: String?, c: Boolean?) : Result {
a ?: return Result.ErrANull
b ?: return Result.ErrBNull
c ?: return Result.ErrCNull
return Result.OK("Everything ok.")
}
sealed class Result {
class OK(val s: String) : Result()
object ErrANull : Result()
object ErrBNull : Result()
object ErrCNull : Result()
}