我有以下代码:
val targetImage: TargetImage?
try
{
targetImage = someFunctionThatCanThrowISE()
}
catch (e: IllegalStateException)
{
targetImage = null
}
编译器说"val 无法重新分配",我可以看到可能是其他一些代码行(本例中未显示(在 try 块中设置了 targetImage 后可能会抛出 ISE。
在Kotlin 中的 try-catch 中处理将 val 设置为某个值(无论是 null 还是其他值(的最佳实践是什么?在目前的情况下,如果我删除捕获中的集合,它将使 targetImage 未设置,并且据我所知,没有办法测试未设置的值,因此我不能在此块之后使用 targetImage。我可以将 val 更改为 var,但我不希望重新分配目标图像。
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
}