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;
}
Другие вопросы по тегам