使用 finally 和 enum 时 kotlin 无法访问代码

kotlin unreachable code when using finally and enum

我遇到过这样的问题,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 错误,还是我遗漏了什么?

编辑:

购物篮提供者是简单的枚举 class:

enum class BasketProvider {
    LOCAL, SHARED
}

finallyalways 执行(除非你在中间调用 System.exit()),所以你的 finally 块中的 return 值将始终覆盖您的 try/catch return 值。另见:Does a finally block always run?

"Unreachable code"这里是误导,应该叫"return value is always overwritten by finally block".