Должен ли я объявлять неконтролируемые исключения в спецификации бросков?
Я знаю, что проверенные исключения должны обрабатываться или задаваться, но исключенные исключения являются необязательными.
Если по какой-то причине я могу разумно ожидать, что в методе возникнет непроверенное исключение, следует ли добавить его в спецификацию throws? Или я должен держать спецификацию как можно короче?
Ответы
Ответ 1
Если по какой-то причине я могу разумно ожидать, что в методе возникнет непроверенное исключение, следует ли добавить его в спецификацию throws?
Так как непроверенные исключения указывают на ошибки программирования, следует избегать объявления их в предложении throws
. Как правило, не следует пытаться поймать эти исключения, за исключением самого высокого уровня вашей программы. Для этого правила существует несколько исключений (каламбур) - например, в производственном коде вы должны ловить NumberFormatException
.
Примечание.. Иногда авторы фреймворков делают свой основной выбор наследованием RuntimeException
(например, HibernateException
), Исключения также должны быть пойманы.
Ответ 2
Это дизайнерское решение. Обычно ты этого не делал. Но если вы считаете, что для пользователя вашего кода важно уловить Exception
, то это способ намекнуть, что он это делает. Другим способом было бы просто добавить его в документацию и объяснить, почему важно поймать Exception
.
Ответ 3
явно объявление в throws-предложение необязательно, поскольку оно касается исключений во время выполнения, но вы должны документировать его в javadoc, чтобы пользователи могли видеть, при каких обстоятельствах это исключение может возникнуть и что это значит.