使用布尔值? 在if表达式中

如果我有一个可空的Boolean b ,我可以在Java中进行以下比较:

 Boolean b = ...; if (b != null && b) { /* Do something */ } else { /* Do something else */ } 

在Kotlin,我可以通过使用!!来达到同样的效果!! 运营商:

 val b: Boolean? = ... if (b != null && b!!) { /* Do something */ } else { /* Do something else */ } 

但是,使用!! 对我来说有点粗略,规避了无效的安全系统。

有没有更优雅的方法呢?


编辑看起来我过度复制了一下。 对于局部变量,正如Banthar所表明的那样,它确实有效。 然而,我的布尔b实际上是一个“支持领域的财产”(我不是真的要加快,但这是什么)。 这是结果:

在这里输入图像描述

您可以使用相等运算符来比较可为null的布尔值与truefalsenull

 var b: Boolean? = null if (b == true) { // b was not null and equal true } 

Kotlin会静态分析你的空检查。 这可以:

 val b: Boolean? = null if( b!=null && b ) { println(b) } 

即使这种失败与类型错误:

 val b: Boolean? = null if( b==null && b ) { println(b) } 

有关更多信息,请参阅: http : //kotlinlang.org/docs/reference/null-safety.html

你也可以使用“空合并运算符”(这将适用于可变变量):

 val b: Boolean? = null if( b?:false ) { println(b) } 

如果你想干净地检查是否Boolean?true还是false你可以这样做:

 when(b) { true -> {} false -> {} } 

如果你想检查是否为null你可以添加(或else )作为时间的值:

 when(b) { true -> {} false -> {} null -> {} } when(b) { true -> {} false -> {} else-> {} } 

从我看到的布尔? 是在可为空的对象上返回布尔值的方法的结果

 val person: Person? = null .... if(person?.isHome()) { //This won't compile because the result is Boolean? //Do something } 

我一直在使用的解决方案是使用let函数来删除可能返回的空值,像这样

 person?.let { if(it.isHome()) { //Do something } }