在Kotlin catch块内设置val

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Kotlin catch块内设置val相关的知识,希望对你有一定的参考价值。

我有以下代码:

val targetImage: TargetImage?

try
{
  targetImage = someFunctionThatCanThrowISE()
}
catch (e: IllegalStateException)
{
  targetImage = null
}

编译器说“val不能被重新分配”,我可以看到,在try块内设置了targetImage后,其他一些代码行(本例中未显示)可能会抛出ISE。

在Kotlin的try-catch中处理val设置为某个值(是null还是其他值)的最佳实践是什么?在目前的情况下,如果我删除catch中的set,它将使targetImage保持未设置状态,并且就我所见,没有办法测试未设置的值,因此我不能在此块之后使用targetImage。我可以将val更改为var但我不希望重新分配targetImage。

答案

Kotlin中的try块是一个表达式,所以你可以将try / catch的值设置为targetImage ...

val targetImage: TargetImage? = try {
    someFunctionThatCanThrowISE()
} catch (e: IllegalStateException) {
    null
}

或者,如果您不希望在字段声明的中间使用try / catch,则可以调用函数。

val targetImage: TargetImage? = calculateTargetImage()

private fun calculateTargetImage(): TargetImage? = try {
    someFunctionThatCanThrowISE()
} catch (e: IllegalStateException) {
    null
}

以上是关于在Kotlin catch块内设置val的主要内容,如果未能解决你的问题,请参考以下文章

在 UNICODE 应用程序的 catch 块内将 char * 转换为 CString

Kotlin 在片段中找不到按钮 ID,为啥?

JAVA中try catch捕获异常的问题

php try catch 捕获哪些错误

使用导航从工具栏菜单项单击在片段之间传递数据 - Kotlin

kotlin-从一个片段更改多个片段的小数位