код рефакторинга для выдачи RuntimeException вместо возврата значения - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно провести рефакторинг существующего кода из-за дублирования кода.

Следующая структура встречается более 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.

Есть идеи, как перестроить эти две строки кода в новый метод и сохранить нетронутой логику исходного метода?

1 Ответ

2 голосов
/ 31 мая 2019

Объявите тип возвращаемого результата 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...