2012-03-13 18 views
24

¿Qué excepción debo lanzar cuando un método de fábrica estática no puede inicializar un nuevo objeto? Prefiero plantear una excepción significativa en lugar de devolver null.Java: excepción adecuada para el error de inicialización

+1

Depende de qué causó la falla en sí, es decir, un problema de red, una falla de lectura de archivo, etc. – Viruzzo

+0

¿Quiere decir que debería lanzar cualquier excepción que obtuve durante la inicialización? –

+0

No necesariamente, pero su excepción debe ser significativa para decir qué salió mal, no solo que * algo * salió mal. – Viruzzo

Respuesta

28

Si está lanzando una excepción en una fábrica debido a datos insuficientes, me gustaría arrojar un IllegalStateException con una descripción similar a "no se puede construir X, no se ha establecido Y".

Si está lanzando una excepción en una fábrica debido a datos contradictorios, me gustaría arrojar un IllegalStateException con una descripción similar a "no se puede construir X, Y entra en conflicto con Z".

Si está lanzando una excepción en una fábrica debido a un valor malo (o absurdo), me gusta arrojar un IllegalArgumentException con una descripción similar a "Y no puede ser A".

Si está lanzando una excepción en una fábrica debido a un valor perdido, me gusta arrojar un IllegalArgumentException con una descripción similar a "Y no puede ser nulo".

La última preferencia es hasta cierto debate. Algunas personas sugieren que podría ser mejor arrojar un NullPointerException; en mi caso, los evitamos a toda costa, ya que muchos clientes tienden a no leer el mensaje de excepción (y suponen que NullPointerException significa un error de codificación).

En cualquier caso, debe proporcionar un mensaje bueno y específico sobre por qué se lanzó la excepción, para facilitar los costos futuros de soporte de ver que la excepción se elevó en unos meses a partir de ahora.

2

Usted puede crear su propia excepción mediante la extensión de clase de excepciones

+0

¿No hay una excepción incorporada para este caso? Es un escenario bastante común. –

+0

Difícilmente podría llamar a un constructor que arroje una excepción a un escenario común – Woot4Moo

+0

Hay muchas excepciones, pero es más flexible tenerlas si es necesario mostrar un mensaje personalizado –

2

Algo como esto probablemente sólo debería ser una aserción, pero si hay, de hecho, la posibilidad de que falle luego una excepción personalizada que sea significativo para que lo haría ser mi elección.

1

Lo ideal sería extender Exception y crear su propio IntializatonException.

2

Sí, la causa del problema es su mejor opción. Si los argumentos no son correctos, puede lanzar IllegalArgumentException, si algún archivo no está allí, puede lanzar FileNotFoundException, si la fábrica no se inicializa correctamente, puede lanzar IllegalStateException, etc., etc.

Sin embargo, crear su propia Excepción es fácil. Simplemente declare su clase como extends Exception y agregue constructores delegados. Si extiende Exception, entonces el método que puede lanzarlo debe declararse con throws. Si no lo desea, puede extender RuntimeException, no es necesario declararlos.

Cuestiones relacionadas