“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;
}
}
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?
Toller Umriss der Features. Sind einige nette Features dabei. Mal sehen wie es später in der Realität aussieht.