Стоит ли генерировать Unchecked Exception из-за плохой конфигурации?

В моем приложении используется файл конфигурации с множеством настраиваемых элементов.

Например, вы можете указать настраиваемое хранилище ключей с настраиваемым псевдонимом, которое будет использоваться для соединений WebService (вместо JVM по умолчанию javax.net.ssl.keystore).

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

Правильно ли я думаю?

Имеет ли смысл создать собственный ConfigurationException (который расширяет RuntimeException) для броска в этом случае?


person Davio    schedule 05.12.2014    source источник


Ответы (3)


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

Если ваше требование: «Приложение не должно продолжать работу, если конфигурации неверны», и нет никакого метода, который пользователь может запустить, чтобы обойти его (в блоке try-catch), тогда я не вижу причин делать его проверенным исключением (зачем делать пользователи выполняют ненужную работу, если мы знаем, что она бесполезна).

Итак, в этом случае я бы также пошел на непроверенное исключение.

person Ouney    schedule 05.12.2014
comment
Спасибо за ваш ответ. Вы бы выбрали RuntimeException по умолчанию или создали расширенное пользовательское исключение, указывающее конкретно на конфигурацию? - person Davio; 05.12.2014
comment
Пойду на кастомы... (ответил не я, но остаюсь при ответе) - person Hichamov; 05.12.2014
comment
Я бы выбрал обычай, так как он обеспечит гораздо более точный контроль. - person Ouney; 05.12.2014

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

person b4da    schedule 05.12.2014

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

При проверке пользовательского ввода, либо прямого пользовательского ввода, либо пользовательского ввода через файл конфигурации, исключение не указывает на ошибку. Следовательно, это должно быть проверенное исключение, чтобы напомнить программисту, который вызывает ваш метод, о том, что исключение может возникнуть и должно быть перехвачено. Перехватив исключение, вы можете создать удобное для пользователя сообщение об ошибке, указывающее на решение. (Вы же не хотите, чтобы конечный пользователь увидел сообщение Exception in thread ..., сгенерированное Java!)

person Hoopje    schedule 05.12.2014