-1
나는이 문제를 해결했으며, android studio는 도달 할 수없는 코드에 대해 경고합니다. 이해가 안 돼, 어떻게 도달 할 수없는거야.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 버그입니까? 아니면 뭔가 빠졌습니까?
편집 :
바구니 제공자는 단순 열거 클래스입니다 : 항상 실행
enum class BasketProvider {
LOCAL, SHARED
}
finally 블록에서 돌아 오지 않아도됩니다. finally 블록은 항상 실행되기 때문에 try 또는 catch 블록에서 반환되는 것을 대신하는 return은 try 또는 catch 블록에서 반환을 도달 할 수 없도록 만들고 메서드에서 throw 된 예외를 삼키는 것입니다. 마침내 블록에서 돌아 오지 마라. 나쁜 습관이다. finally 블록은 항상 자원을 닫거나 다른 정리를하는 데 유용합니다. –