【问题标题】:Android(Kotlin) Toast using Elvis Operator to use a Default String value when value from intent/arguments is NullAndroid(Kotlin)Toast 使用 Elvis 运算符在意图/参数的值为 Null 时使用默认字符串值
【发布时间】:2020-09-16 22:49:16
【问题描述】:

我有这种实现

Toast.makeText(activity,arguments?.get("message") as String, Toast.LENGTH_SHORT).show()

所以,问题是我想在这里使用 Elvis Operator(?:) ,以便使用一些 default 字符串,当值显示里面的吐司是空的。 我无法正确实施。那么,如何在同一行代码中实现它?? 另外,有什么更好的方法吗? 谢谢。

【问题讨论】:

    标签: android kotlin android-intent arguments toast


    【解决方案1】:

    只需将 elvis 运算符放在可为空的 get 调用之后:

    Toast.makeText(activity, arguments?.get("message") ?: "Default value", Toast.LENGTH_SHORT).show()
    

    以下是一些观察:

    • null ?: "default" 评估为 default
    • "valid str" ?: "default" 计算为 valid str

    【讨论】:

      【解决方案2】:

      你可以这样做:

      Toast.makeText(activity, arguments?.get("message") ?: "default message", Toast.LENGTH_SHORT).show()
      

      【讨论】:

        【解决方案3】:

        大概是这样的

        Toast.makeText(activity,arguments!!.get("message") ?: "default", Toast.LENGTH_SHORT).show()
        

        当使用? 时,它只是忽略空值,但在!! 上必须处理回退。

        【讨论】:

        • 如果argumentsnull,这实际上会导致KotlinNullPointerException 在运行时被抛出,因此不会调用Elvis 运算符。如果arguments 不为null,那么Elvis 运算符也不会被执行。
        • @user2340612 +1,但想补充一点,如果get("message") 可能为空,那么 elvis 将被执行。
        • @user2340612 如果有参数,但该键没有值,它将被调用。但是,这仍然是一个糟糕的解决方案,可能会无缘无故地导致 NPE
        • 如果argumentsMap(这似乎很可能),那是真的,否则它取决于它的实际类型。但谢谢你们指出这一点,这是一个很好的观察!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-25
        • 1970-01-01
        • 2020-10-30
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 2020-11-05
        相关资源
        最近更新 更多