Вы бы бросаться IllegalStateException
если:Является ли IllegalStateException подходящим для неизменяемого объекта?
- метод не в состоянии выполнять свою работу из-за ценности (ы) одного или нескольких полей
- Эти поля
final
и назначается только в конструкторе?
Пример учебника: ваш класс является неизменным Collection<BigInteger>
, и ваш метод должен возвращать максимальный элемент, но этот экземпляр пуст.
Я прочитал Kevin Bourillon`s blog post по этому вопросу, и я не уверен, какое правило применяется.
UnsupportedOperationException - это означает, что вызванный метод всегда будет терпеть неудачу для экземпляра этого класса (конкретного типа), независимо от того, как был создан экземпляр.
Определенно нет. Многие экземпляры этого класса не пусты, и операция была бы успешной.
IllegalStateException - ... там существует по крайней мере одно альтернативное состояние, что экземпляр в вопросе мог бы быть в, который бы прошел проверку ... < надрез > ... Отметим также, что это исключение целесообразно, действительно ли можно реально мутировать этот аспект состояния экземпляра, или уже слишком поздно.
Не совсем. Этот экземпляр был сконструирован с нулевой длиной, поэтому этот экземпляр не является и никогда не мог быть непустым.
IllegalArgumentException - исключение этого исключения означает, что для этого параметра существует хотя бы одно другое значение, которое могло бы привести к передаче вопроса.
Может применяться, если рассматриваемый параметр является неявным параметром this
. Это исключение, которое я соблазн бросить, но я обеспокоен тем, что это может сбить с толку.
Обновление: изменен пример из Collection<Integer>
к Collection<BigInteger>
потому тот факт, что существует единичный элемент (Integer.MIN_VALUE
) отвлекает от вопроса.
В этом вопросе есть две разные вещи. ** Один ** должен иметь метод утилиты, который возвращает максимум данной коллекции (что, как указывает Джон, подобно методу Collections.max) ** other ** находится в заголовке вопроса, * неизменяемом объекте * с максимальным методом, возвращающим либо максимальное значение делегированного объекта, либо его самого.Этот второй сценарий - тот, на который я отвечаю http://stackoverflow.com/questions/3267958/is-illegalstateexception-appro-for-an-immutable-object/3268353#3268353 – OscarRyz