Я хочу реализовать свой собственный набор Exceptions
для проектов, над которыми я сейчас работаю. Проект опирается на основную структуру с базовым исключением MyFrameworkException
(я также пишу эту структуру).
Для любого данного проекта я хотел бы задать несколько разных типов Exceptions
, и я не могу решить между использованием нескольких подклассов или одного подкласса с некоторой формой Enum
в качестве параметра конструктора.
В обоих случаях я:
public class MyFrameworkException extends Exception { /*...*/ }
Вариант 1:
public class MyProjectBaseException extends MyFrameworkException { /*...*/ }
public class SpecificExceptionType1 extends MyProjectBaseException { /*...*/ }
public class SpecificExceptionType1 extends MyProjectBaseException { /*...*/ }
public class SpecificExceptionType1 extends MyProjectBaseException { /*...*/ }
Затем во всем проекте я бы выбрал конкретное исключение для любой возникающей проблемы.
Вариант 2:
public class MyProjectException extends MyFrameworkException {
public static enum Type {
SpecificType1, SpecificType2, SpecificType3
}
public MyProjectException( Type type ) { /*...*/ }
}
Здесь я всегда буду бросать MyProjectException
с конкретным типом перечисления для любой возникающей проблемы. Я бы предоставил некоторый механизм, чтобы оператор switch мог выполняться на любом MyProjectException
на основе перечисления типа.
Каков наилучший способ обработки исключений в проектах, особенно тех, которые используют общую инфраструктуру? Являются ли два варианта выше хорошими? Почему или почему нет? И какие еще лучшие решения?