我有以下代码:

val targetImage: TargetImage?

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

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

在 Kotlin 的 try-catch 中处理将 val 设置为某个值(无论是 null 还是其他值)的最佳实践是什么?在目前的情况下,如果我删除 catch 中的集合,它将使 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
}

关于null - 在 Kotlin catch 块中设置一个 val,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49087336/

10-10 14:25