我有以下代码:
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。
答案 0 :(得分:4)
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
}