如果我有一个可空的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实际上是一个"具有支持字段的属性"(我实际上并没有达到速度,而是强加了它).这是结果:
Ily*_*lya 166
你可以比较可空布尔值true,false或null使用相等运算符:
var b: Boolean? = null
if (b == true) {
    // b was not null and equal true
} 
if (b == false) {
   // b is false 
}
if (b != true) { 
   // b is null or false 
}
Eli*_*zer 25
如果要清晰地检查是否Boolean?是true或者false你可以这样做:
when(b) {
    true -> {}
    false -> {}
}
如果你想检查它null是否可以在(else)中添加(或)作为值when:
when(b) {
    true -> {}
    false -> {}
    null -> {}
}
when(b) {
    true -> {}
    false -> {}
    else-> {}
}
Pio*_*zmo 22
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
您还可以使用"null coalescing operator"(这将适用于可变变量):
val b: Boolean? = null
if (b ?: false) {
    println(b)
}
从我所看到的布尔值?是方法的结果,该方法在可为空的对象上返回布尔值
val person: Person? = null
....
if(person?.isHome()) { //This won't compile because the result is Boolean?
  //Do something
}
我一直在使用的解决方案是使用该let函数删除可能返回的null值,如下所示
person?.let {
  if(it.isHome()) {
    //Do something
  }
}
| 归档时间: | 
 | 
| 查看次数: | 42842 次 | 
| 最近记录: |