Zuweisung einer Standardvariable für eine letzte Variable im Falle einer Ausnahme in Java

8

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!

    
Alfonso 08.04.2010, 20:43
quelle

3 Antworten

7
%Vor%

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:

%Vor%

Um einen Compiler zu schreiben, der sehr spezifische Fälle behandelt, wäre das eine immense Aufgabe - wahrscheinlich gibt es sehr viele.

    
danben 08.04.2010, 21:03
quelle
2

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.

    
Tom Hawtin - tackline 08.04.2010 22:17
quelle
0

Wie wäre es mit einem geworfenen Error ?

    
lexicore 08.04.2010 20:45
quelle

Tags und Links