Це виникла в ході дискусії з колегою сьогодні.
Javadocs для Java IllegalStateException
стверджує, що він:
Сигналізує про те, що метод був використаний у незаконний або невідповідний час. Іншими словами, середовище Java або програма Java не перебуває у відповідному стані для запитуваної операції.
І Ефективна Java говорить (Пункт 60, сторінка 248):
Іншим часто використовуваним винятком є IllegalStateException. Як правило, це виняток для викиду, якщо виклик є незаконним через стан об’єкта, що отримує. Наприклад, це був би виняток для викиду, якщо абонент намагався використати якийсь об'єкт до того, як він був належним чином ініціалізований.
Здається, тут є трохи розбіжностей. Друге речення javadocs здається схожим на те, що виняток може описати дуже широку умову про стан виконання Java, але опис у Effective Java здається таким, що використовується для умов, що стосуються стану стану об'єкта, чий метод був названий.
Звичаї, які я бачив у JDK (наприклад, колекції Matcher
) та в Гуаві, безумовно, потрапляють у категорію, про яку говорить Ефективна Java ("Цей об'єкт знаходиться у стані, коли цей метод не можна викликати"). Це також, здається, узгоджується з IllegalStateException
російським братом або сестрою IllegalArgumentException
.
Чи є IllegalStateException
в JDK якісь законні звичаї, які стосуються "середовища Java" або "програми Java"? Або будь-які посібники з найкращих практик виступають за його використання для більш широкого стану виконання? Якщо ні, чому, блін, javadocs так сформулювали? ;)
In Java, an exception that occurs when using multiple threads, whereby one thread modifies an object in a way that makes it incompatible with the use of that object in the second thread, thus putting the object into an illegal state.
. А? Звідки це?