Ответ 1
Если вы выбрасываете исключение на фабрике из-за недостаточных данных, мне нравится бросать IllegalStateException
с описанием, аналогичным "невозможно построить X, а Y не установлен".
Если вы бросаете исключение на фабрику из-за противоречивых данных, мне нравится бросать IllegalStateException
с описанием, аналогичным "не может конструировать X, Y конфликты с Z".
Если вы выбрасываете исключение на фабрике из-за плохого (или бессмысленного) значения, мне нравится бросать исключение IllegalArgumentException
с описанием, аналогичным "Y не может быть A".
Если вы бросаете исключение в Factory из-за отсутствующего значения, мне нравится бросать исключение IllegalArgumentException
с описанием, аналогичным "Y не может быть null".
Последнее предпочтение зависит от некоторых дебатов. Некоторые люди предполагают, что лучше было бы выбрасывать NullPointerException
; в моем случае мы избегаем их любой ценой, поскольку многие клиенты, как правило, не читают сообщение об исключении (и предполагают, что NullPointerException означает ошибку кодирования).
В любом случае вы должны предоставить хорошее, конкретное сообщение о том, почему было исключено исключение, чтобы облегчить ваши будущие расходы на поддержку, чтобы увидеть, что это исключение возникло через несколько месяцев.