重构代码以抛出RuntimeException而不是返回值

时间:2019-05-30 23:08:05

标签: java refactoring runtimeexception

由于代码重复,我需要重构现有代码。

在疯狂的课堂中,以下结构发生了10次以上:

public MyType doSomething(...) {
    MyType myType = ........
    if (myType == null) {
        final String message = "...";
        LOGGER.error(message);
        throw new XxxRuntimeException(message));
    }
    return myType;
}

我想将LOGGER.errorthrow new RuntimeException行重构为这样的新方法:

private void logErrorAndThrowRuntimeException(String message) {
    LOGGER.error(message);
    throw new XxxRuntimeException(message));
}

问题在于重构后的if内部没有返回值。

我无法将异常的类型从RuntimeException更改为Exception,因为此应用程序具有疯狂的逻辑并且需要抛出RuntimeExceptin。

有什么主意如何将这两行代码重构为一个新方法,并保持原始方法的逻辑不变?

1 个答案:

答案 0 :(得分:2)

声明一个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;
}