Throwable и исключение в Java
Предположим, у меня есть класс с именем BugException, который расширяется от RuntimeException
И у BugException есть конструктор копирования, который принимает Throwable.
Этот код компилирует и проверяет тип:
Throwable e = ...;
if (e instanceof BugException) {
throw new BugException(e);
}
Почему это так:
Throwable e = ...;
if (e instanceof BugException) {
throw e;
}
Не компилируется и выдает сообщение об ошибке: необработанное исключение. java.lang.Throwable.?
Почему эта ненужная упаковка необходима для проверки типов?
1 ответ
Решение
Во время компиляции неизвестно, что за исключение e
является. Это может быть проверенное исключение, и в этом случае компилятору понадобится, чтобы вы завернули throw
в try/catch или заставьте метод бросить его.
Однако, если вы явно приведете непроверенное исключение, оно будет скомпилировано.
Throwable e = ...;
if (e instanceof BugException) {
throw (BugException) e;
}