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

时间:2016-11-21 09:16:35

标签: kotlin finally unreachable-code

我已经遇到过这样的问题,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
}

1 个答案:

答案 0 :(得分:2)

finally阻止总是执行(除非你在中间调用System.exit()),因此你的finally块中的返回值将始终覆盖你的try / catch返回值。另见:Does a finally block always run?

“无法访问的代码”在这里有误导性,它应该被称为“返回值总是被finally块覆盖”。