Android 有没有可能将try-catch函数作为中缀函数?
我正在尝试为我的项目创建一个中缀函数,以检查try-catch函数的结果 我看到了一个解决方案,但它将块作为参数传递,并在tryOrNull函数中运行该块Android 有没有可能将try-catch函数作为中缀函数?,android,kotlin,Android,Kotlin,我正在尝试为我的项目创建一个中缀函数,以检查try-catch函数的结果 我看到了一个解决方案,但它将块作为参数传递,并在tryOrNull函数中运行该块 fun <T : Any> tryOrNull(body: () -> T?): T? { //the body returns T? so that you can give up the work by returning null return try { body() } catch (e: Exception) {
fun <T : Any> tryOrNull(body: () -> T?): T? {
//the body returns T? so that you can give up the work by returning null
return try {
body()
} catch (e: Exception) {
e.printStackTrace()
null
}
}
这是我看到的信息
但是我想知道是否有其他的方法来解决这个问题
fun parse(): MyData? {
return tryOrNull { parse1() }
?: tryOrNull { parse2() }
?: tryOrNull { parse3() }
fun parse(): MyData? {
return parse().tryOrNull() ?: false
}
我想创建一个中缀或扩展函数,但我根本不知道如何管理。谢谢 您建议的语法(parse().tryOrNull()
)是不可能的,因为将调用parse()
,并在到达tryOrNull()之前返回结果
但是,
::parse.tryOrNull()
或
如果您这样编写实用程序函数,则可以:
inline fun <T> (() -> T).tryOrNull(): T? = runCatching(this)
.also { it.exceptionOrNull()?.printStackTrace() }
.getOrNull()
inlinefun(()->T).tryOrNull():T?=(这个)
.另外{it.exceptionOrNull()?.printStackTrace()}
.getOrNull()
但我认为你展示的原始语法更清晰。在tryOrNull
调用中包装您正在调用的东西,而不是像事后想的那样附加tryOrNull
,这在语义上更有意义
inline fun <T> (() -> T).tryOrNull(): T? = runCatching(this)
.also { it.exceptionOrNull()?.printStackTrace() }
.getOrNull()