首页 > 解决方案 > 我应该在 if-else 块中抛出异常吗?

问题描述

这是代码:

public Response getABC(Request request) throws Exception {
    Response res = new Response();
    try {
        if (request.someProperty == 1) {
            // business logic
        } else {
           throw new Exception("xxxx");
        }
    } catch (Exception e) {
        res.setMessage(e.getMessage); // I think this is weird
    }
    return res;
}

该程序运行良好。我认为它应该重新设计,但如何?

标签: javaif-statementexceptionthrow

解决方案


在 try 块中抛出异常并立即捕获它是没有意义的,除非 catch 块抛出不同的异常。

这样你的代码会更有意义:

public Response getABC(Request request) {
    Response res = new Response();
    if (request.someProperty == 1) {
        // business logic
    } else {
        res.setMessage("xxxx");
    }
    return res;
}

如果您的业务逻辑(在条件为 时执行true)可能会抛出异常,您只需要 try-catch 块。

如果您没有捕获异常(这意味着调用者必须处理它),您可以不使用该else子句:

public Response getABC(Request request) throws Exception {
    if (request.someProperty != 1) {
        throw new Exception("xxxx");
    }

    Response res = new Response();
    // business logic
    return res;
}

推荐阅读