JDK7 Testfahrt – Teil 2
“Catching Multiple Exception Types”
Ein praktisches Feature, um doppelte catch-Blöcke zu vermeiden. Es ist nun möglich mit einem Catch-Block mehrere Exception-Typen gleichzeitig zu fangen. Die Exception-Typen werden dabei mit dem ODER-Operator (|) getrennt. Im Catch-Block kann die gefangene Exception unter gemeinsamen Supertyp angesprochen werden.
static class AException extends Exception {
public void fooFromA() {}
}
static class BException extends AException {
public void fooFromB() {}
}
static class CException extends AException {
public void fooFromC() {}
}
public void x() {
try {
z();
} catch (BException | CException e) {
e.fooFromA();
// e.fooFromB(); Compiler-Fehler
// e.fooFromC(); Compiler-Fehler
}
}
public void z() throws BException, CException {
// heavy lifting
}
“Improved Checking for Rethrown Exceptions”
Des Weiteren “merkt” sich der Compiler nun, welche Exception-Typen im try-Block geworfen können. So kann im Catch-Block ein Supertyp gefangen und weiter geworfen werden, auch wenn dieser Supertyp gar nicht in der throws-Deklaration vorkommt.
public void y() throws BException, CException {
try {
z();
} catch (Throwable e) {
// e darf ohne Cast weiter geworfen werden, da
// der Compiler sich "gemerkt hat", dass im
// try-Block nur BException und CException
// vorkommen können.
throw e;
}
}
April 24th, 2011 at 3:02 am
Gut, dass die es eingeführt haben! Finds schrecklich oftmals 3 oder 4 catchblöcke auf einmal zu haben, in denen im Prinzip das gleiche stattfindet.
Gruß
Long
P.S. Kannst du mir eine Email Benachrichtigung auf Comments einrichten?
September 12th, 2011 at 9:31 pm
Toller Umriss der Features. Sind einige nette Features dabei. Mal sehen wie es später in der Realität aussieht.