¿Cómo y dónde define su propia jerarquía de excepciones en Java?


¿Cómo y dónde define su propia jerarquía de excepciones en Java?

Mi pregunta principal se refiere a la ubicación del paquete donde se deben definir sus clases de excepción.

¿Creamos un paquete especial para nuestras excepciones y ponemos todas las clases dentro de él?

Author: Aprian Diaz Novandi, 2010-04-21

4 answers

Uso esto como regla general.

  • Cuando tenga sentido, use una excepción Java predefinida. Por ejemplo, si su código tiene algún tipo de error de E/S, está bien lanzar una IOException.
  • Solo use jerarquías de excepciones si necesita diferenciar entre las dos excepciones en un bloque try/catch. Muchas veces está perfectamente bien tener un solo componente lanzando un solo tipo de excepción con diferentes mensajes para diferentes errores. Si el usuario realmente no puede hacer nada para maneje el error especialmente, use la misma clase de excepción genérica. Si el usuario es capaz de manejarlos de manera diferente, es entonces cuando debe usar una jerarquía.
  • Para las jerarquías, no haga que todas las excepciones de diferentes componentes hereden de una excepción base. No hay ninguna razón real para hacer esto. Si el consumidor quiere atrapar algo, simplemente puede atrapar una excepción.
  • Para la ubicación del paquete, pongo una clase Exception con el código al que se relaciona. Así que si tengo un servicio de negocios en un paquete a. b.c, tengo una excepción de negocios a.b.c.para ir con él. No soy fan de poner todas las excepciones en un paquete de excepciones. Sólo hace que sea difícil de encontrar.
 27
Author: Chris Dail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 13:25:37

Pongo todas mis excepciones personalizadas en un paquete com.company.project.exception. Hago esto en lugar de ponerlos "cerca" de los lugares donde surgen.

Aquí está mi razonamiento: Si una excepción dada solo está surgiendo dentro de una o dos clases de servicio en algún lugar, puede que no sea una excepción lo suficientemente general como para merecer su propia clase. Solo si veo un tema común apareciendo en varios lugares, me tomaré la molestia de crear una clase de excepción personalizada. Y si está apareciendo en varios lugares, entonces no hay ningún paquete lógico para "adjuntarlo", por lo que un paquete específico de excepción parece ser el camino correcto.

 12
Author: Jim Kiley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 13:50:41

Puede crear sus clases de excepción donde quiera.

Lo importante es extender una clase de excepción existente (java.lang.Throwable de hecho). Por ejemplo java.lang.Exception o java.lang.RuntimeException. La primera es una excepción marcada, mientras que extender RuntimeException resultará en una excepción sin marcar; las diferencias entre las dos se detallan aquí.

 5
Author: Etienne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 13:23:52

El lenguaje no especifica ningún requisito para qué paquetes las clases definidas por el usuario Exception deben ser puestas. Mientras la clase se extienda java.lang.Throwable, se puede lanzar.

 1
Author: Syntactic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 13:21:22