Mam bardzo głupie pytanie dla ciebie :)try-catch i zmienne końcowe
Na przykład, mam następujący fragment kodu:
class MyClass {
public static void main (String[] args) {
final String status;
try {
method1();
method2();
method3();
status = "OK";
} catch (Exception e) {
status = "BAD"; // <-- why compiler complains about this line??
}
}
public static void method1() throws Exception {
// ...
}
public static void method2() throws Exception {
// ...
}
public static void method3() throws Exception {
// ...
}
}
Pytanie jest wewnątrz: dlaczego kompilator narzeka na tej linii ?
IntelliJ IDEA mówi, że Variable 'status' might already have been assigned to
.
Ale, jak widzę, nigdy nie docieramy do linii (gdzie ustawiamy status = "OK"
) w przypadku wyjątkowej sytuacji. Więc zmienna status
będzie BAD
i wszystko powinno być w porządku. A jeśli nie mamy żadnego wyjątku, otrzymamy OK
. I ustawimy tę zmienną tylko RAZ raz.
Jakieś przemyślenia na ten temat?
Dzięki za pomoc!
kompilator nie jest tak mądry, a jeśli deklarują, że metoda może rzucać kompilator wyjątek przyzwyczajenie być stara się go sprawdzić, więc dla uproszczenia nie dopuszcza takie rzeczy się wydarzy – Toumash