Von Java 7, können wir die Try-with-Ressourcen-Anweisung:Wie kann die unterdrückte Ausnahme im "try" -Block abgerufen werden?
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
wenn br.readLine()
und br.close()
beiden Würfe Ausnahmen, readFirstLineFromFile
wird Wurf die Ausnahme von dem try-Block (Ausnahme: von br.readLine()
), und die Ausnahme von implizit schließlich Block der Try-with-Ressourcen-Anweisung (die Ausnahme von br.close()
) wird unterdrückt werden.
In diesem Fall können wir abrufen unterdrückt Ausnahmen von der impliziten schließlich blockieren, indem die getSuppresed
Methode von Ausnahme des try-Block wie dieser Aufruf:
try {
readFirstLineFromFile("Some path here..."); // this is the method using try-with-resources statement
} catch (IOException e) { // this is the exception from the try block
Throwable[] suppressed = e.getSuppressed();
for (Throwable t : suppressed) {
// Check t's type and decide on action to be taken
}
}
Aber Angenommen, wir müssen mit einer Methode arbeiten, die mit einer älteren Version als Java 7 geschrieben wurde, in der der finally-Block verwendet wird:
static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
dann, wenn br.readLine()
und br.close()
noch einmal beide Ausnahmen werfen, wird die Situation umgekehrt werden. Das Verfahren readFirstLineFromFileWithFinallyBlock
wird throw die Ausnahme von den schließlich (die Ausnahme von br.close()
) blockieren, und die Ausnahme von dem try-Block (ausgenommen br.readLine()
) werden unterdrückt.
Also meine Frage ist: Wie können wir die unterdrückt Ausnahmen vom try-Block im zweiten Fall abrufen ?
Quelle: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
Ich werde "JonSkeet" zu den folgenden TAGS hinzufügen ... ^^ –