Когда проверенные исключения выбрасываются из методов конструктора, которые конструктор не может обработать, нормально их поймать и выкинуть обратно в качестве исключения во время выполнения, если вы уверены, что приложение не может его обработать и будет бесполезным без объект, который строится?
Можно ли конструкторам бросать исключения во время выполнения?
Ответ 1
Да, это неизбежно во многих конструкторах, так или иначе, когда они вызывают другие методы, поскольку всегда есть вероятность, что они уже будут бросать исключенные исключения.
Ответ 2
Да. Это стандартная практика.
В Эффективная Java, 2-е изд., это подпадает под действие пункта 61 "Выбросить исключения, соответствующие абстракции". Независимо от того, проверено или не проверено результирующее исключение, также распространяется Эффективная Java в пункте 58 "Использовать проверенные исключения для восстанавливаемых условий и исключений во время выполнения для ошибок программирования".
То, что это конструктор, а не обычный метод, не является проблемой. (На самом деле, конструкторы, возможно, имеют большую свободу, поскольку они не связаны супер-интерфейсом.)
При выбросе исключения в результате другого исключения рекомендуется убедиться, что вы устанавливаете cause
для нового исключения.
Ответ 3
Да, это полностью допустимо для исключения исключения в вашем конструкторе. У вас мало или вообще нет другого выбора, кроме как сделать это, особенно когда вы просто пытаетесь построить объект, и все просто не работает правильно.
Ответ 4
Хорошо, что вы выбрали проверенное исключение, чтобы показать, что конструкция объекта не удалась, как уже прокомментировал Крис Шут-Юнг. Было ли хорошей идеей бросить непроверенное исключение, это еще одна проблема. Вы потеряете придирчивость компилятора, который побуждает вас поймать и обработать исключение, которое вы, безусловно, захотите сделать.
Ответ 5
Да. Если вы не знаете, как следует обрабатывать исключение, вам лучше его выбрасывать, а не просто глотать его и распечатывать трассировку стека (или, что еще хуже, абсолютно ничего).
Это поможет предотвратить некоторые чрезвычайно трудные для отладки ошибки позже.
Ответ 6
Лично мне не нравится, когда конструкторы бросают проверенные исключения (как уже указывал доппельдиш). Тем не менее, как вы можете быть уверены, что приложение не может справиться с этим исключением? Даже если приложение не может справиться с этим, возможно, пользователь может, просто попробовав еще раз?