Подтвердить что ты не робот

Можно ли конструкторам бросать исключения во время выполнения?

Когда проверенные исключения выбрасываются из методов конструктора, которые конструктор не может обработать, нормально их поймать и выкинуть обратно в качестве исключения во время выполнения, если вы уверены, что приложение не может его обработать и будет бесполезным без объект, который строится?

4b9b3361

Ответ 1

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

Ответ 2

Да. Это стандартная практика.

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

То, что это конструктор, а не обычный метод, не является проблемой. (На самом деле, конструкторы, возможно, имеют большую свободу, поскольку они не связаны супер-интерфейсом.)

При выбросе исключения в результате другого исключения рекомендуется убедиться, что вы устанавливаете cause для нового исключения.

Ответ 3

Да, это полностью допустимо для исключения исключения в вашем конструкторе. У вас мало или вообще нет другого выбора, кроме как сделать это, особенно когда вы просто пытаетесь построить объект, и все просто не работает правильно.

Ответ 4

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

Ответ 5

Да. Если вы не знаете, как следует обрабатывать исключение, вам лучше его выбрасывать, а не просто глотать его и распечатывать трассировку стека (или, что еще хуже, абсолютно ничего).

Это поможет предотвратить некоторые чрезвычайно трудные для отладки ошибки позже.

Ответ 6

Лично мне не нравится, когда конструкторы бросают проверенные исключения (как уже указывал доппельдиш). Тем не менее, как вы можете быть уверены, что приложение не может справиться с этим исключением? Даже если приложение не может справиться с этим, возможно, пользователь может, просто попробовав еще раз?