我使用 Kotlin 对 Android 应用程序进行编程。对于空指针安全,需要检查是否所有引用都是非空的。但是,如果只有一个为空,那么我们应该通知用户出了问题。
对我来说,以简洁易读的方式编程很重要。
我正在寻找一个简短易懂的解决方案。
标准方法是:
if (b != null && a != null && c !=null ...) println ("everything ok.")
else println("Something went wrong")
以下是编写条件的两种简洁方法:
listOf(a, b, c).any { it == null }
listOf(a, b, c).filterNotNull().any()
在上下文中,您可以通过以下方式使用它:
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."
}
此方法的优点是,根据哪个值为 null,可能会有不同的错误结果:
使用异常:
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() }