Estoy buscando implementar mi propio conjunto de Exceptions
para proyectos en los que estoy trabajando actualmente. El proyecto se basa en un marco central con una excepción de marco base MyFrameworkException
(también estoy escribiendo este marco).Excepciones personalizadas: diferenciar a través de muchas subclases o clases individuales respaldadas con enum?
Para cualquier proyecto dado me gustaría arrojar varios tipos diferentes de Exceptions
y no puedo decidir entre el uso de múltiples subclases o una sola subclase con algún tipo de Enum
como parámetro de constructor.
En ambos casos he:
public class MyFrameworkException extends Exception { /*...*/ }
Opción 1:
public class MyProjectBaseException extends MyFrameworkException { /*...*/ }
public class SpecificExceptionType1 extends MyProjectBaseException { /*...*/ }
public class SpecificExceptionType1 extends MyProjectBaseException { /*...*/ }
public class SpecificExceptionType1 extends MyProjectBaseException { /*...*/ }
Luego, durante todo el proyecto que lanzaba la excepción específica para cualquier problema que se produce.
Opción 2:
public class MyProjectException extends MyFrameworkException {
public static enum Type {
SpecificType1, SpecificType2, SpecificType3
}
public MyProjectException(Type type) { /*...*/ }
}
Aquí siempre me tiraría MyProjectException
con el tipo de enumeración específica para cualquier problema que se produce. Proporcionaría algún mecanismo para que se pueda realizar una instrucción switch en cualquier MyProjectException
según el tipo enum.
¿Cuál es la mejor manera de manejar excepciones en proyectos, especialmente aquellos que comparten una infraestructura común? ¿Las dos opciones anteriores son buenas soluciones? ¿Por qué o por qué no? Y cuales son las mejores soluciones?
Para agregar a esto: La opción 2 parece códigos de error disfrazados de excepciones. –
Sí, el plan es nunca volver a lanzar excepciones en nuevas excepciones envueltas y también permitir que ciertas excepciones java/third-party-lib se propaguen fuera de los métodos de mi proyecto. Muchos de mis métodos lanzarán excepciones personalizadas + otras excepciones java. – Andy
@Andy: Excelente, sí, pensé que probablemente querías decir eso. –