Я играю с созданием фабричного метода для генерации RuntimeExceptions.Java Generics, обеспечивающий параметры Enum
Идея заключается в том, чтобы выбросить исключение, выполнив следующий фрагмент:
throw ExceptionFactory.build(CustomException.class, CustomException.NOT_FOUND);
Первый параметр метода сборки является класс исключения, однако второй параметр будет ссылаться на Enum, который определен в пределах CustomException класс для загрузки дополнительных сведений при построении исключения.
Пример:
public class CustomException extends RuntimeException {
public static final ExceptionType NOT_FOUND = ExceptionType.NOT_FOUND;
//constructors, getters, setters, etc..
private enum ExceptionType {
NOT_FOUND(Status.NOT_FOUND, "These aren't the droids you're looking for!");
private Status status;
private String description;
private ExceptionType(Status status, String description){
this.status = status;
this.description = description;
}
//other methods here..
}
}
вопрос у меня есть с ExceptionFactory.build(), как указать параметры для метода сборки() таким образом, что второй параметр должен быть специфическими для класса CustomException ?
Если этот подход кажется сумасшедшим, как его можно улучшить? Цель состоит в том, чтобы иметь общий заводский метод для создания исключений, у которых есть уже загруженные детали. То, что я хочу, чтобы избежать это что-то вроде этого ..
ExceptionFactory.build(CustomException.class, "Some string...")
Идея заключается описание должно быть определено в CustomException, а не только что-либо при броске ошибку. Итак, как обеспечить соблюдение?
public class ExceptionFactory {
public static <T extends RuntimeException> T build(T e, ???){
//more logic here...
}
}
Разве что у вас есть несколько разных настраиваемых типов исключений, каждый из которых имеет такую вещь перечисления? Я не думаю, что это может произойти. Возможно, вы можете использовать синтаксис, похожий на построитель, вместо перечисления? –
@ byte-crunch, язык параметров типа Java не имеет средств для описания типа в терминах его содержащего типа. Идея Слэкса могла бы работать, но я не думаю, что это или твоя стартовая идея фактически приведет тебя туда, где ты действительно хочешь быть. –
Да, было бы несколько классов типа «CustomException», каждый из которых имеет внутреннее перечисление, определяющее особенности генерирования этого конкретного исключения.То, что я хотел сделать, это иметь общий метод «build», который принимает первый параметр для определения класса исключения, а затем на основе этого класса применяет допустимые инструкции во втором параметре. –