Kotlin:必需:kotlin.Boolean.发现:kotlin.Boolean?

Ely*_*lye 13 kotlin

我写了一个条件如下

    if (subsriber?.isUnsubscribed && isDataEmpty()) {
        loadData()
    }
Run Code Online (Sandbox Code Playgroud)

因为我的订阅者可能为null.显示上述标题错误.所以我把它如下所示

    if (subsriber?.isUnsubscribed as Boolean && isDataEmpty()) {
        loadData()
    }
Run Code Online (Sandbox Code Playgroud)

看起来不太好看.有没有更好的方法呢?

And*_*dEx 33

我通常会与?:运营商解决这种情况:

if (subsriber?.isUnsubscribed ?: false && isDataEmpty()) {
    loadData()
}
Run Code Online (Sandbox Code Playgroud)

这样,如果subscribernull,subsriber?.isUnsubscribed也是null并且subsriber?.isUnsubscribed ?: false评估false,希望是预期的结果,否则切换到?: true.

同时使用nullable类型进行转换as Boolean不安全的,如果null遇到则会抛出异常.

  • 你也可以写一下`subscriber?.isUnsubscribed == true`,我觉得它更清楚. (14认同)

Jac*_*per 7

另外,您是否还需要:kotlin.Boolean。找到:kotlin.Boolean?你可以这样做:

when(something?.isEmpty()) {
    true ->  {  }
    false -> {  }
    null ->  {  }
}
Run Code Online (Sandbox Code Playgroud)

另外,如果您只对一个简单的条件语句感兴趣

if(something?.isEmpty() == true){
  this will only worked if not null && empty
}
Run Code Online (Sandbox Code Playgroud)

我知道这是一个已回答的问题,但对于将来的观看者会有所帮助


Sap*_*ven 5

解决此问题的另一种方法是显式检查表达式是否为true

if (subsriber?.isUnsubscribed == true && isDataEmpty()) {
    loadData()
}
Run Code Online (Sandbox Code Playgroud)