Зачем мне расширять java.lang.RuntimeException - PullRequest
2 голосов
/ 30 мая 2011

Мне недавно задали вопрос, по-видимому, в интервью о расширении java.lang.RuntimeException.

Меня попросили привести пример, где необходимо расширить исключение java.lang.RuntimeException.

Я всегда думал, что нам не нужно расширять RuntimeException, кто-нибудь может меня просветить?

Спасибо, SB

Ответы [ 6 ]

4 голосов
/ 30 мая 2011

Исключение времени выполнения одного слоя является проверенным (и действующим) для другого слоя.

Я вижу контейнеры, например, контейнер сервлета;REPLs и / или что-либо цикл интерпретатора верхнего уровня;и т. д. законно выбирают и перехватывают исключения RuntimeException, поскольку они не должны аварийно завершать работу просто потому, что в стеке происходит что-то более глубокое.

Как и в случае с контейнером, пересечение границ смежности, например пересечение слоев или уровней, обычно требует более четко сформулированной семантики исключений.

Если свойства «причины» и / или сообщения оказываются семантически недостаточными для выражения чего-либо, кроме «эй, он сломался», и клиентский / более высокий уровень может действовать избирательно, то это, вероятно, допустимо для подкласса RuntimeException,

3 голосов
/ 30 мая 2011

Вы хотите расширить RuntimeException, когда создаете исключение, которое не нужно явно перехватывать (непроверенное исключение).Это случай исключений, которые сигнализируют о проблеме, которая обычно не может быть восстановлена ​​(например, мертвая база данных).

Вам следует взглянуть на разницу между проверенными и непроверенными исключениями вДжава.

0 голосов
/ 30 мая 2011

когда клиент не может разумно восстановиться из программы, я бы выдал исключения времени выполнения, как правило, это непроверенные исключения, в основном ошибки в коде, когда клиент не ожидает восстановления во время выполнения

примеры: неработающая ссылка на источник данных, ошибка привязки JNDI, предварительное условие не выполнено для определенных операций (деление, где знаменатель равен нулю) - это сценарии для этого подкласса RuntimeException

0 голосов
/ 30 мая 2011

Вам следует придерживаться этих правил, чтобы это исключение не распространялось, потому что его следует использовать обычно там, где больше нельзя выполнить действие и операция должна быть прервана.

Но если вам нужно найти приложение для этого случая, вы можете сказать, что, создав другой тип RuntimeException, мы можем лучше контролировать обработчик исключений, чтобы отображать сообщения об исключениях и т. Д., Но ИМХО это только играть в разговор.

0 голосов
/ 30 мая 2011

RuntimeException является суперклассом тех исключений, которые могут быть выброшены во время нормальной работы виртуальной машины Java.

Если вы добавляете новую функцию в jdk или изменяете реализацию jvm, вы должны расширить RuntimeExceptionдля добавления нового RuntimeException.

0 голосов
/ 30 мая 2011

RuntimeException является суперклассом те исключения, которые могут быть выброшены во время нормальной работы Виртуальная машина Java.

Метод не требуется объявлять в его броски оговорка любые подклассы RuntimeException, которое может быть брошено во время выполнения метода, но не пойман.

См. RuntimeException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...