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