Java 7 - Точный повторный вызов с окончательным исключением

В предыдущих версиях java повторное генерирование исключения трактовалось как выброс типа параметра catch.

Например:

public static void test() throws Exception{
    DateFormat df = new SimpleDateFormat("yyyyMMdd");
    try {
        df.parse("x20110731");
        new FileReader("file.txt").read();
    } catch (Exception e) {
        System.out.println("Caught exception: " + e.getMessage());
        throw e;
    }
}

] В Java 7 вы можете более точно указать возникшее исключение, если объявите исключение final :

//(doesn't compile in Java<7)
public static void test2() throws ParseException, IOException{
    DateFormat df = new SimpleDateFormat("yyyyMMdd");
    try {
        df.parse("x20110731");
        new FileReader("file.txt").read();
    } catch (final Exception e) {
        System.out.println("Caught exception: " + e.getMessage());
        throw e;
    }
}

Мой вопрос : в документации сказано, что мне нужно объявить исключение окончательный . Но если я этого не сделаю, приведенный выше код все равно компилируется и работает. Я что-то упускаю?

Ссылки:

Project Coin: многократный захват и окончательное повторное выбрасывание
Добавление более гибкой проверки на повторное создание исключений

22
задан dogbane 31 July 2011 в 11:46
поделиться