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

时间:2016-04-07 02:24:38

标签: kotlin

我写了一个条件如下

    if (subsriber?.isUnsubscribed && isDataEmpty()) {
        loadData()
    }

由于我的订阅者可能为null。显示上述标题错误。所以我把它转换成如下

    if (subsriber?.isUnsubscribed as Boolean && isDataEmpty()) {
        loadData()
    }

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

4 个答案:

答案 0 :(得分:26)

我通常使用?:运算符来解决这种情况:

if (subsriber?.isUnsubscribed ?: false && isDataEmpty()) {
    loadData()
}

这样,如果subscribernull,则subsriber?.isUnsubscribed也是null,而subsriber?.isUnsubscribed ?: false的评估结果为false,这可能是预期的结果,否则切换到?: true

同时使用as Boolean投射可空类型为unsafe,如果遇到null则会抛出异常。

答案 1 :(得分:5)

你还有必需:kotlin.Boolean。发现:kotlin.Boolean ?你可以这样做:

when(something?.isEmpty()) {
    true ->  {  }
    false -> {  }
    null ->  {  }
}

此外,如果您只对一个简单的条件声明

感兴趣
if(something?.isEmpty() == true){
  this will only worked if not null && empty
}

我知道这是一个已回答的问题,但未来的观众可以提供帮助

答案 2 :(得分:5)

解决此问题的另一种方法是显式检查表达式是否为<TextBlock x:Name="Title" FontSize="{myUserControl.FontSize * 1.07}"> Hello Custom User Control! </TextBlock>

true

答案 3 :(得分:0)

如果 subscriberval,则

subscriber != null && subscriber.isUnsubscribed && isDataEmpty()

将起作用。另外,subscriber != nullif块内是众所周知的,您可以在subscriber上调用方法而无需使用?.!!.