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;
        }
    }

2 Responses to “JDK7 Testfahrt – Teil 2”

  1. Long Hoang Says:

    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?

  2. Sebastian Says:

    Toller Umriss der Features. Sind einige nette Features dabei. Mal sehen wie es später in der Realität aussieht.