使用布尔值? 在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的布尔值与true
, false
或null
:
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 } }