Мне нужно реорганизовать существующий код из-за дублирования кода.
Следующая структура встречается более 10 раз в сумасшедшем классе:
public MyType doSomething(...) {
MyType myType = ........
if (myType == null) {
final String message = "...";
LOGGER.error(message);
throw new XxxRuntimeException(message));
}
return myType;
}
Я хотел бы преобразовать строки LOGGER.error
и throw new RuntimeException
в новый метод, подобный этому:
private void logErrorAndThrowRuntimeException(String message) {
LOGGER.error(message);
throw new XxxRuntimeException(message));
}
Проблема в том, что внутри условия if
после рефакторинга нет возвращаемого значения.
Я не могу изменить тип исключения с RuntimeException
на Exception
, потому что это приложение имеет сумасшедшую логику и нужно выбросить RuntimeExceptin.
Любая идея, как преобразовать эти две строки кода в новый метод и сохранить логику исходного метода нетронутой?
Объявите возвращаемый тип Throwable:
private XxxRuntimeException logErrorAndThrowRuntimeException(String message) {
LOGGER.error(message);
// You can throw here, or return if you'd prefer.
throw new XxxRuntimeException(message));
}
Затем вы можете бросить это на сайт вызова, чтобы указать, что тело if не может нормально завершиться:
public MyType doSomething(...) {
MyType myType = ........
if (myType == null) {
final String message = "...";
throw logErrorAndThrowRuntimeException(message);
}
return myType;
}