Kotlin 中是否有一个习惯用法,用于在变量尚未为 null 时将其设置为 null?语义上比以下更令人愉悦的东西:
var test: String? = null
if(test != null) test = null
您可以使用 execute if not null 习语:
test?.let { test = null }
只需将 null 赋给局部变量即可:
test = null
如果它不为 null,则将 null 分配给该变量。 如果变量为 null,您只需将 null 分配给它,因此没有任何改变。
我想出了这个扩展,这使得事情变得更简单:
inline fun <T, R> T.letThenNull(block: (T) -> R): T? { block(this); return null }
val test: Any? = null
...
test = test?.letThenNull { /* do something with test */ }
参考上面Eliezer的回答并做一些调整:
@OptIn(ExperimentalContracts::class)
inline fun <T> T?.letThenNull(crossinline block: (T) -> Unit): Nothing? {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
this?.let { block(it) }
return null
}
这样做有两个好处:
1.让IDE知道块内的
it
不为空。
2.返回值必须为
null
.