我已经遇到过这样的问题,android工作室警告我无法访问的代码。我不明白,它是如何无法到达的。
我的原始代码:
try {
return BasketProvider.valueOf(prefs.getString(KEY_BASKET_PROVIDER, null)) //unreachable code here
} finally {
return BasketProvider.LOCAL
}
如果我最后更改为catch(e :IllegalArgumentException)
,则没有任何警告。如果我将所有这些组合在一起,则会再次出现警告。
try {
return BasketProvider.valueOf(prefs.getString(KEY_BASKET_PROVIDER, null))//no warning
} catch (e: IllegalArgumentException) {
return BasketProvider.LOCAL
}
--------------------------------
try {
return BasketProvider.valueOf(prefs.getString(KEY_BASKET_PROVIDER, null))//unreachable code
} catch (e: IllegalArgumentException) {
return BasketProvider.LOCAL //unreachable code
} finally {
return BasketProvider.LOCAL
}
这是Kotlin的错误,还是我错过了什么?
编辑:
篮子提供者是简单的枚举类:
enum class BasketProvider {
LOCAL, SHARED
}
答案 0 :(得分:2)
finally
阻止总是执行(除非你在中间调用System.exit()
),因此你的finally块中的返回值将始终覆盖你的try / catch返回值。另见:Does a finally block always run?
“无法访问的代码”在这里有误导性,它应该被称为“返回值总是被finally块覆盖”。