Ton*_*Joe 31 kotlin kotlin-null-safety
在Kotlin中,如果对象不是null,我可以运行代码:
data?.let {
... // execute this block if not null
}
Run Code Online (Sandbox Code Playgroud)
但如果对象为null,我该如何执行代码块?
hot*_*key 102
您可以使用elvis运算符并使用以下代码评估另一个代码块run { ... }:
data?.let {
// execute this block if not null
} ?: run {
// execute this block if null
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎并没有被相当的简单,可读if- else声明.
此外,您可能会发现此问答有用:
Dmi*_*nko 25
您可以创建这样的中缀函数:
infix fun Any?.ifNull(block: () -> Unit) {
if (this == null) block()
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
data ifNull {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
Pix*_*ant 14
只需使用正常if:
if (data == null) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
M. *_*ich 13
这是使用Elvis运算符的简洁语法。回想一下,Elvis运算符仅在左侧计算为null时才执行右侧。
data ?: doSomething()
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码
myNullable?.let {
} ?: {
// do something
}()
Run Code Online (Sandbox Code Playgroud)
你也可以省略 fun()
myNullable?.let {
} ?: fun() {
// do something
}()
Run Code Online (Sandbox Code Playgroud)
或者你可以打电话invoke()而不是()
myNullable?.let {
} ?: fun() {
// do something
}.invoke()
Run Code Online (Sandbox Code Playgroud)
请注意,返回值与下面不同。
val res0 = myNullable?.let {
} ?: () {
}()
val res1 = myNullable?.let {
} ?: fun() {
"result"
}()
val res2 = myNullable?.let {
} ?: () {
"result"
}()
println("res0:$res0")
println("res1:$res1")
println("res2:$res2")
Run Code Online (Sandbox Code Playgroud)
结果:
res0:kotlin.Unit // () {} with empty
res1:kotlin.Unit // fun() {}
res2:result // () {} with return
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11880 次 |
| 最近记录: |