kotlin - 在 Koltin 中处理可为空的 val 的最佳方法是什么?
问题描述
我有一个接受可为空字符串的函数,但要求它们为非空。
fun fn(a: String?) {
if (a == null) {
logger.warn("a is null, aborting")
return
}
// do something
fnThatDoesNotAcceptNulls(a)
}
有没有更好的方法来检查值是否为 null 以及return
来自 Kotlin 中的函数?
解决方案
您可以通过以下方式解决此问题:
- 仅使用
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)
}
}
- 使用“猫王”(
?:
)
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)和带有扩展的选项。但这一切都取决于情况或情况。
推荐阅读
- python - 使用 BeautifulSoup 从多个页面下载多线程文件的 Web 抓取
- android - Firestore startAt 跳过给它的快照并改为 startAfter
- python - 两个机器人之间的通信?(discord.py)
- java - spring integration(5.3.2)如何支持分布式环境下多节点集群?
- linux - Linux (psql) 不会列出所有数据库,但 pgadmin 会列出
- r - 使用赋值运算符和字符串列名更新数据表列的值不起作用
- c# - WPF 错误:调用线程无法访问此对象,因为不同的线程拥有它
- javascript - 如何在css中删除按钮和文本,如行
- mongodb - MongoDB Find Query,根据文档中的键值动态更改搜索键
- asp.net - 如何在字符串变量中缩进 JSON?