gpt4 book ai didi

function - 在Kotlin中将异常用作默认参数

转载 作者:行者123 更新时间:2023-12-02 13:04:15 24 4
gpt4 key购买 nike

我在Kotlin中编写了一个函数,用于从数据库中检索T类型的项目。

如果找不到匹配的结果,则用户可以指定要调用的 Action ,否则将抛出IllegalArgumentException:

fun get(
...,
onNoneFound: () -> T = throw IllegalStateException("No matching results found")
): T {
...

return when (results.size) -> {
0 -> onNoneFound.invoke()
1 -> ...
else -> chooseResult(...)
}
}

我遇到的问题是,每当调用函数时,似乎在执行函数主体之前就抛出了 IllegalStateException

从某种意义上说,这很有意义,我认为一种解决方法是:
fun get(
...,
onNoneFound: (() -> T)? = null
): T {
...

return when (results.size) -> {
0 -> if (onNoneFound == null) {
throw IllegalArgumentException("No matching results found")
} else {
onNoneFound.invoke()
}
1 -> ...
else -> chooseResult(...)
}
}

我想知道是否有一个更优雅/更可取的解决方案来解决此问题-理想情况下,我不必使函数可为空,以后再进行空检查。有没有办法用Kotlin的默认参数语法做到这一点?

编辑:
我想到我可以使用elvis运算符进行null检查,这确实使代码更加优雅:
onNoneFound?.invoke() ?: throw IllegalArgumentException("No matching results found")

但是我仍然很好奇Kotlin是否有内置方法来执行此操作而无需执行null检查。

最佳答案

您不应该直接构建异常。尝试:

fun get(
...,
onNoneFound: () -> T = { throw IllegalStateException("No matching results found") }
): T {
...

return when (results.size) -> {
0 -> onNoneFound.invoke()
1 -> ...
else -> chooseResult(...)
}
}

关于function - 在Kotlin中将异常用作默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com