-1
私はこのような問題を抱えており、アンドロイドスタジオは到達不能なコードについて警告しています。私は理解できません、どのように到達不能です。kotlin finallyとenumを使用すると到達不能なコード
私の元のコード:
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のバグですか、何か不足していますか?
EDIT:
バスケットプロバイダは、単純な列挙型クラスです:
enum class BasketProvider {
LOCAL, SHARED
}
あなたはfinallyブロックから戻ることはできません。 finallyブロックは常に実行されるので、returnはtryブロックまたはcatchブロックから返されたものに優先し、tryまたはcatchブロックのリターンを到達不能にし、メソッドからスローされた例外を取り込む。最終的にブロックから戻らないでください。悪い習慣です。 finallyブロックは、常にリソースを閉じたり、他のクリーンアップを行うのに便利です。 –