如果我有一个可空的Boolean b
,我可以在Java中进行以下比较:
Boolean b = ...;
if (b != null && b) {
/* Do something */
} else {
/* Do something else */
}
Run Code Online (Sandbox Code Playgroud)
在Kotlin中,我可以通过使用!!
运算符来实现相同的目的:
val b: Boolean? = ...
if (b != null && b!!) {
/* Do something */
} else {
/* Do something else */
}
Run Code Online (Sandbox Code Playgroud)
然而,!!
对我来说使用感觉有点粗略,绕过零安全系统.
有更优雅的方法吗?
编辑似乎我有点过分了.对于局部变量,如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
}
Run Code Online (Sandbox Code Playgroud)
Eli*_*zer 25
如果要清晰地检查是否Boolean?
是true
或者false
你可以这样做:
when(b) {
true -> {}
false -> {}
}
Run Code Online (Sandbox Code Playgroud)
如果你想检查它null
是否可以在(else
)中添加(或)作为值when
:
when(b) {
true -> {}
false -> {}
null -> {}
}
when(b) {
true -> {}
false -> {}
else-> {}
}
Run Code Online (Sandbox Code Playgroud)
Pio*_*zmo 22
Kotlin将静态分析您的空检查.这可以:
val b: Boolean? = null
if (b != null && b) {
println(b)
}
Run Code Online (Sandbox Code Playgroud)
即使这失败了类型错误:
val b: Boolean? = null
if (b == null && b) {
println(b)
}
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息,请访问:http://kotlinlang.org/docs/reference/null-safety.html
您还可以使用"null coalescing operator"(这将适用于可变变量):
val b: Boolean? = null
if (b ?: false) {
println(b)
}
Run Code Online (Sandbox Code Playgroud)
从我所看到的布尔值?是方法的结果,该方法在可为空的对象上返回布尔值
val person: Person? = null
....
if(person?.isHome()) { //This won't compile because the result is Boolean?
//Do something
}
Run Code Online (Sandbox Code Playgroud)
我一直在使用的解决方案是使用该let
函数删除可能返回的null值,如下所示
person?.let {
if(it.isHome()) {
//Do something
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42842 次 |
最近记录: |