【发布时间】:2016-11-21 09:16:34
【问题描述】:
我遇到过这样的问题,android studio 会警告我有关无法访问的代码。我不明白,它是如何无法访问的。
我的原始代码:
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
}
【问题讨论】:
-
你不应该从 finally 块返回。由于 finally 块总是在运行,所以 return 将取代 try 或 catch 块返回的内容,从而有效地使 try 或 catch 块中的 return 无法访问,并吞下方法抛出的异常。不要从 finally 块返回:这是不好的做法。 finally 块对于始终关闭资源或进行其他一些清理很有用。
标签: kotlin finally unreachable-code