Вы должны бросить исключение обратно клиенту в методе, который они вызывают. Исключения, которые генерируются внутри API частными методами, должны либо возвращать исключение клиенту, либо перехватывать его и делать что-то полезное. Вы должны выбросить исключение в стек методов, если невозможно продолжить выполнение с генерируемым исключением.
Обычно мне нравится использовать исключения, расширяя Exception
или его подкласс. Поэтому тип создаваемого исключения является более значимым и понятным для клиента. Поэтому я обычно ловлю, а потом кидаю кастомную.
Проверенные исключения, как правило, лучше всего использовать, расширяя Exception
. Они, как правило, легче отлаживать. Но, конечно, вы можете захотеть использовать непроверенные исключения в некоторых случаях.
Что бы вы не использовали возвращаемые значения для указания исключительных обстоятельств, это плохая практика для Java. Просто подумал, что упомяну это так, как видел раньше.
Куда бы вы ни выдавали исключение, убедитесь, что вы добавили в него осмысленное сообщение, понятное клиенту.
В конечном итоге все сводится к тому, что вы хотели бы в API, но вы должны всегда делать его максимально простым в использовании и легко отлаживать при возникновении исключений.