Kotlin 如果不为空则设置为空

问题描述 投票:0回答:4

Kotlin 中是否有一个习惯用法,用于在变量尚未为 null 时将其设置为 null?语义上比以下更令人愉悦的东西:

var test: String? = null
if(test != null) test = null
null kotlin
4个回答
8
投票

您可以使用 execute if not null 习语:

test?.let { test = null }

3
投票

只需将 null 赋给局部变量即可:

test = null

如果它不为 null,则将 null 分配给该变量。 如果变量为 null,您只需将 null 分配给它,因此没有任何改变。


3
投票

我想出了这个扩展,这使得事情变得更简单:

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 */ }

0
投票

参考上面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
.

© www.soinside.com 2019 - 2024. All rights reserved.