我有一个函数,它接受可为null的字符串,但要求它们为非null。
fun fn(a: String?) {
if (a == null) {
logger.warn("a is null, aborting")
return
}
// do something
fnThatDoesNotAcceptNulls(a)
}
有没有更好的方法来检查Kotlin中函数的值是否为null和return
?
您可以通过以下方式解决此问题:
- 仅使用
if
(您的版本(
fun fn(a: String?) {
if (a == null) {
logger.warn("a is null, aborting")
return
}
// do something
fnThatDoesNotAcceptNulls(a)
}
- 仅使用
if
fun fn(a: String?) {
if (a != null) {
// do something
fnThatDoesNotAcceptNulls(a)
return
}
logger.warn("a is null, aborting")
}
- 使用
if
(但不记录(:
fun fn(a: String?) {
if (a != null) {
// do something
fnThatDoesNotAcceptNulls(a)
}
}
- 使用
if-else
fun fn(a: String?) {
if (a == null) {
logger.warn("a is null, aborting")
} else {
// do something
fnThatDoesNotAcceptNulls(a)
}
}
- 使用
when
(带表达式主体-取决于返回类型!(:
fun fn(a: String?) = when (a) {
null -> {
logger.warn("a is null, aborting")
}
else -> {
// do something
fnThatDoesNotAcceptNulls(a)
}
}
- 使用";elvis";(
?:
(
fun fn(a: String?) {
val value = a ?: return
// do something
fnThatDoesNotAcceptNulls(value)
}
- 使用
let
扩展:
fun fn(a: String?) {
a?.let {
// do something
fnThatDoesNotAcceptNulls(it)
}
}
- 使用
let
扩展(当a
为空时处理"负"情况(:
fun fn(a: String?) {
a?.let {
fnThatDoesNotAcceptNulls(a)
} ?: logger.warn("a is null, aborting")
}
- 使用
run
扩展:
fun fn(a: String?) {
a?.run {
// do something
fnThatDoesNotAcceptNulls(this)
}
}
- 使用
run
扩展(当a
为空时处理"负"情况(:
fun fn(a: String?) {
a?.run {
// do something
fnThatDoesNotAcceptNulls(this)
} ?: logger.warn("a is null, aborting")
}
私下里,我喜欢选项5(带elvis(和带扩展名的选项。但这一切都取决于具体情况。