Warum kann Java mir nicht erlauben, einer finalen Variablen in einem catch-Block einen Wert zuzuweisen, nachdem ich den Wert im try-Block gesetzt habe, selbst wenn es im Falle einer Ausnahme nicht möglich ist, den endgültigen Wert zu schreiben.
Hier ist ein Beispiel, das das Problem demonstriert:
%Vor%Das Problem ist nicht schwer zu umgehen, aber ich würde gerne verstehen, warum der Compiler dies nicht akzeptiert.
Vielen Dank im Voraus für etwaige Eingaben!
Der Grund dafür ist, dass der Compiler nicht folgern kann, dass die Ausnahme nur ausgelöst werden kann, bevor foo
initialisiert wurde. Dieses Beispiel ist ein spezieller Fall, in dem das offensichtlich ist, aber bedenken Sie:
Um einen Compiler zu schreiben, der sehr spezifische Fälle behandelt, wäre das eine immense Aufgabe - wahrscheinlich gibt es sehr viele.
Um ein Pedant zu sein, könnte Thread.stop(Throwable)
direkt nach der Try-Block-Zuweisung eine Ausnahme auslösen.
Die Regeln mit definitiver Zuweisung und verwandten Begriffen sind jedoch komplex genug. Überprüfen Sie die JLS. Der Versuch, weitere Regeln hinzuzufügen, würde die Sprache komplizieren und keinen wesentlichen Nutzen bringen.