Quelle est l'utilisation prévue de l'exception IllegalStateException?

Cela est arrivé lors d'une discussion avec un collègue aujourd'hui.

La Javadoc de Java IllegalStateException état:

Les signaux qu'une méthode a été appelée à une illégales ou inappropriées temps. En d'autres termes, l'environnement Java ou Java application n'est pas dans un état approprié à l'opération demandée.

Et Efficace Java indique (Article 60, page 248):

Un autre souvent réutilisés exception IllegalStateException. C'est généralement à l'exception de jeter si l'invocation est illégale en raison de l'état de l'objet récepteur. Par exemple, ce serait l'exception à jeter si l'appelant a tenté d'utiliser un objet avant qu'il ait été correctement initialisé.

Il semble qu'il ya un peu de différence ici. La deuxième phrase de la javadoc le fait ressembler à l'exception peut décrire une très large condition sur le Java état de l'exécution, mais la description Effective de Java fait sonner comme il est utilisé dans des conditions particulièrement liée à l'état de l'état de l'objet dont la méthode a été appelée.

Les usages que j'ai vu dans le JDK (par exemple, les collections, Matcher) et dans la Goyave certainement l'impression de tomber dans la catégorie que l'efficacité de Java parle ("Cet objet est dans un état où cette méthode ne peut pas être appelé"). Cela semble également compatible avec IllegalStateExceptions'frère IllegalArgumentException.

Sont-il légitime IllegalStateException usages dans le JDK qui ne se rapportent à la "environnement Java" ou "Java application"? Ou faire des guides sur les pratiques exemplaires défenseur de l'utiliser pour l'ensemble de l'état de l'exécution? Si non, pourquoi diable sont les javadocs formulé comme ça? 😉

  • Sur un peut-être sans rapport, note, j'ai remarqué StackOverflow est [illegalstatexception] tag dit 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.. Hein? D'où vient-il?
  • Le "Java application" est celui de vous écrire, et vous pouvez les utiliser IllegalStateException il (soit directement, soit parce que vous êtes à l'aide de Goyave, par exemple). Où est la différence?
  • La balise wiki semble faux, j'ai soumis une édition généreusement par l'emprunt à partir de cette question; vous devriez voir la nouvelle version une fois qu'il a passé l'examen par les pairs.