Kotlin:编码讨论:检查多个可能为空的变量的优雅方法

  • 本文关键字:变量 方法 编码 Kotlin kotlin null
  • 更新时间 :
  • 英文 :


我使用 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()
    }
    

相关内容

  • 没有找到相关文章

最新更新