Ich habe versucht, eine Antwort auf diese Frage zu finden, erhielt aber keine zufriedenstellende Erklärung. Hier ist ein Hintergrund:Java7 multiple Ausnahmebehandlung
Java 7 ermöglicht es uns, mehrere Ausnahmen in einem einzigen catch-Block zu fangen, sofern diese Ausnahmen von verschiedenen Hierarchie sind. ZB:
try {
// some code
} catch(SQLException | FileNotFoundException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
Aber wenn Ausnahmen von der gleichen Hierarchie sind, müssen wir mehrere catch-Blöcke wie verwenden:
try {
// some code
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
Aber wenn ich versuche, Code zu schreiben, wie unten Compiler beschwert sich, dass „Die Ausnahme FileNotFoundException
bereits durch die alternative IOException
"gefangen
try {
// some code
} catch(FileNotFoundException | IOException e) { // compiler error
e.printStackTrace();
}
Nun meine Frage: Warum Compiler einen Fehler in letzten Fall berichtet, kann es nicht Figur heraus, dass FileNotFoundException
Sonderfall von IOException
ist? Dies würde die Code-Duplizierung speichern, wenn meine Ausnahmebehandlungslogik dieselbe ist.
Wenn Sie 'IOException' verarbeiten, müssen Sie nicht den gleichen Handler-Block für' FileNotFoundException' verwenden –