Со следующим кодом:
try {
throw new RuntimeException ("main");
}
finally {
throw new RuntimeException ("finally");
}
Получаю этот результат:
Exception in thread "main" java.lang.RuntimeException: finally
at test.main(test.java:12)
Однако, с добавлением исключенных исключений в Java 7, не было бы логичным для языка регистрировать оригинальное "основное" исключение, как подавленное, когда блок finally
сам сбой выходит из строя с исключением? В настоящее время мне приходится вручную подражать этому:
try {
throw new RuntimeException ("main");
}
catch (RuntimeException exception) {
try {
throw new RuntimeException ("finally");
}
catch (RuntimeException exception2) {
exception2.addSuppressed (exception);
throw exception2;
}
}
чтобы получить более полезный (для понимания того, что происходит):
Exception in thread "main" java.lang.RuntimeException: finally
at test.main(test.java:13)
Suppressed: java.lang.RuntimeException: main
at test.main(test.java:9)
EDIT: Чтобы выяснить, что мне интересно. Текущая версия Java - 8, подавленные исключения - не новая функция. Но try..finally
все еще не включает их. Есть ли что-то, что мешает этому?