¿Le lanzar una IllegalStateException
si:¿IllegalStateException es apropiado para un objeto inmutable?
- Un método es incapaz de hacer su trabajo debido al valor (s) de uno o más campos
- Esos campos están
final
y asigna únicamente en el constructor?
ejemplo clásico: su clase es una inmutable Collection<BigInteger>
y su método se supone que devuelve el elemento máximo, pero esta instancia está vacía.
He leído Kevin Bourillon`s blog post sobre el tema y no estoy seguro de qué regla se aplica.
UnsupportedOperationException: esto significa que el método invocado siempre fallará para una instancia de esta clase (tipo concreto), independientemente de cómo se haya construido la instancia.
Definitivamente no. Muchas instancias de esta clase no están vacías y la operación habría tenido éxito.
IllegalStateException - ... sí existe al menos un estado alternativo que la instancia en cuestión podría haber estado en, lo que habría superado el control ... <tijeretazo> ... Tenga en cuenta también que esta excepción es apropiado si es posible o no mutar realmente este aspecto del estado de la instancia, o si ya es demasiado tarde.
No del todo. Esta instancia se construyó con longitud cero, por lo que esta instancia no es y nunca podría haber estado vacía.
IllegalArgumentException - al lanzar esta excepción, implica que existe al menos otro valor para este parámetro que habría provocado que la verificación en cuestión pase.
Podría aplicarse si el parámetro en cuestión es el parámetro this
implícito. Esta es la excepción que estoy tentado a arrojar, pero me preocupa que pueda ser confuso.
actualización: ejemplo cambió Collection<Integer>
-Collection<BigInteger>
debido al hecho de que había un elemento de identidad (Integer.MIN_VALUE
) distrae de la cuestión.
Hay dos cosas diferentes en esta pregunta. ** Uno ** es tener un método de utilidad, que devuelve el máximo de una colección determinada (que, como apunta Jon, es exactamente como el método Collections.max) El ** otro ** está en el título de su pregunta, un * objeto inmutable * tener un método máximo, que devuelve el valor máximo de un objeto delegado o el propio.Este segundo escenario es el que estoy respondiendo http://stackoverflow.com/questions/3267958/is-illegalstateexception-approved-for-an-immutable-object/3268353#3268353 – OscarRyz