Это появилось в дискуссии с коллегой сегодня.
Javadocs для Java IllegalStateException
утверждают, что он:
Сигналы о том, что метод был вызван в незаконное или ненадлежащее время. Другими словами, среда Java или приложение Java не находятся в соответствующем состоянии для запрошенной операции.
И эффективная Java говорит (Пункт 60, страница 248):
Другим обычно используемым исключением является IllegalStateException. Это, как правило, исключение для броска, если вызов является незаконным из-за состояния принимающего объекта. Например, это было бы исключение для броска, если вызывающий пытался использовать какой-либо объект, прежде чем он был правильно инициализирован.
Кажется, здесь немного расхождения. Во втором предложении javadocs звучит так, что исключение может описывать очень широкое условие состояния выполнения Java, но описание в Effective Java делает его похожим на условия, связанные конкретно с состоянием состояния объекта, метод был вызван.
Устройства, которые я видел в JDK (например, коллекции, Matcher
) и в Guava, определенно, похоже, относятся к категории, о которой говорит Effective Java ( "Этот объект находится в состоянии, когда этот метод не может быть называется" ). Это также похоже на IllegalStateException
sibling IllegalArgumentException
.
Существуют ли в JDK законные IllegalStateException
-услуги, которые относятся к "среде Java" или "Java-приложению"? Или какие-либо рекомендации по лучшей практике пропагандируют его использование для более широкого состояния исполнения? Если нет, то почему это так называемые javadocs?;)