A RuntimeException
следует использовать только тогда, когда клиент не может восстановиться после любой проблемы. Иногда уместно делать то, о чем вы говорите, но чаще это не уместно.
Если вы используете JDK> = 1.4, вы можете сделать что-то вроде:
try {
// Code that might throw an exception
} catch (IOException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
и переброшенный RuntimeException
будет иметь в себе первоначальную причину. Таким образом, кто-то наверху цепочки ловит RuntimeException
- ваши цепочки ловят RuntimeException
, поэтому они не просто молча умирают, верно? - может, по крайней мере, распечатать полный след стека причины.
Но, как говорили и будут говорить другие, исключения проверяются по причине. Делайте это только в том случае, если вы уверены, что ваши клиенты не могут оправиться от проблемы, которую вы выбрасываете как непроверенное исключение.
ПРИМЕЧАНИЕ. Лучше, чем просто RuntimeException
, было бы использовать более конкретное непроверенное исключение, если оно доступно. Например, если единственная причина, по которой ваш метод может выдать ClassNotFoundException
, заключается в том, что отсутствует файл конфигурации, вы можете перебросить MissingResourceException
, что является непроверенным исключением, но дает дополнительную информацию о том, почему вы его выбрасываете. Другие полезные RuntimeException
, которые можно использовать, если они описывают проблему, которую вы выбрасываете, - IllegalStateException
, TypeNotPresentException
и UnsupportedOperationException
.
Также обратите внимание, что ВСЕГДА неплохо, чтобы ваши потоки перехватывали RuntimeException и как минимум регистрировали его. По крайней мере, так вы понимаете, почему ваши темы уходят.