Esto surgió hoy en una discusión con un colega.
Los Javadocs para Java IllegalStateException
afirman que:
Señala que se ha invocado un método en un momento ilegal o inapropiado. En otras palabras, el entorno Java o la aplicación Java no se encuentran en un estado apropiado para la operación solicitada.
Y Effective Java dice (artículo 60, página 248):
Otra excepción comúnmente reutilizada es IllegalStateException. Esta es generalmente la excepción a lanzar si la invocación es ilegal debido al estado del objeto receptor. Por ejemplo, esta sería la excepción a lanzar si la persona que llama intenta usar algún objeto antes de que se haya inicializado correctamente.
Parece que hay un poco de discrepancia aquí. La segunda oración de los javadocs hace que parezca que la excepción podría describir una condición muy amplia sobre el estado de ejecución de Java, pero la descripción en Java efectivo hace que parezca que se usa para condiciones relacionadas específicamente con el estado del estado del objeto cuyo se ha llamado al método.
Los usos que he visto en el JDK (por ejemplo, colecciones Matcher
) y en Guava definitivamente parecen caer en la categoría de la que habla Effective Java ("Este objeto está en un estado en el que no se puede llamar a este método"). Esto también parece consistente conIllegalStateException
el hermano de ' IllegalArgumentException
.
¿Hay IllegalStateException
usos legítimos en el JDK que se relacionen con el "entorno Java" o la "aplicación Java"? ¿O alguna guía de mejores prácticas aboga por su uso para el estado de ejecución más amplio? Si no es así, ¿por qué diablos están los javadocs redactados así? ;)
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.
. ¿Eh? ¿De donde viene esto?