在Koltin中处理可为null的vals的最佳方法是什么



我有一个函数,它接受可为null的字符串,但要求它们为非null。

fun fn(a: String?) {
if (a == null) {
logger.warn("a is null, aborting")
return
}
// do something
fnThatDoesNotAcceptNulls(a)
}

有没有更好的方法来检查Kotlin中函数的值是否为null和return

您可以通过以下方式解决此问题:

  1. 仅使用if(您的版本(
fun fn(a: String?) {
if (a == null) {
logger.warn("a is null, aborting")
return
}
// do something
fnThatDoesNotAcceptNulls(a)
}
  1. 仅使用if
fun fn(a: String?) {
if (a != null) {
// do something
fnThatDoesNotAcceptNulls(a)
return
}
logger.warn("a is null, aborting")
}
  1. 使用if(但不记录(:
fun fn(a: String?) {
if (a != null) {
// do something
fnThatDoesNotAcceptNulls(a)
}
}
  1. 使用if-else
fun fn(a: String?) {
if (a == null) {
logger.warn("a is null, aborting")
} else {
// do something
fnThatDoesNotAcceptNulls(a)
}
}
  1. 使用when(带表达式主体-取决于返回类型!(:
fun fn(a: String?) = when (a) {
null -> {
logger.warn("a is null, aborting")
}
else -> {
// do something
fnThatDoesNotAcceptNulls(a)
}
}
  1. 使用";elvis";(?:(
fun fn(a: String?) {
val value = a ?: return

// do something
fnThatDoesNotAcceptNulls(value)
}
  1. 使用let扩展:
fun fn(a: String?) {
a?.let {
// do something
fnThatDoesNotAcceptNulls(it)
}
}
  1. 使用let扩展(当a为空时处理"负"情况(:
fun fn(a: String?) {
a?.let {
fnThatDoesNotAcceptNulls(a)
} ?: logger.warn("a is null, aborting")
}
  1. 使用run扩展:
fun fn(a: String?) {
a?.run {
// do something
fnThatDoesNotAcceptNulls(this)
}
}
  1. 使用run扩展(当a为空时处理"负"情况(:
fun fn(a: String?) {
a?.run {
// do something
fnThatDoesNotAcceptNulls(this)
} ?: logger.warn("a is null, aborting")
}

私下里,我喜欢选项5(带elvis(和带扩展名的选项。但这一切都取决于具体情况。

最新更新