抛出异常然后捕获与重复错误处理

问题描述 投票:0回答:1

我的代码逻辑如下:

// Option 1
try {
   String result = x.getResult();
   if (result == null) {
     // some handling
     logger.error("xxx");
   }
} catch (Throwable t) {
   // some handling
  logger.error("xxx", t);
} 

在 if 和 catch 块中,处理和日志记录逻辑是重复的。我们可以将其更改为

// Option 2
try {
   String result = x.getResult();
   if (result == null) {
     throw new RuntimeException("yyy");
   }
} catch (Throwable t) {
   // some handling
  logger.error("xxx", t);
} 

我觉得创建一个异常然后立即捕获它只是为了代码的可读性。然而,这是一个更昂贵的操作。选项 2 比选项 1 更好吗?

java exception try-catch code-readability
1个回答
0
投票

我不会仅仅为了简化代码而抛出异常。像这样合并它们怎么样:

String result = null;
try {
    result = x.getResult();
} catch (Throwable t) {
    // fall through
}
if (result == null) {
    // some handling
    logger.error("xxx", t);
}

或者你可以将其提取到一个在底部失败并在成功时提前返回的方法:

private String getResult() {
    try {
        String result = x.getResult();
        if (result != null) {
            return result;
        }
    } catch (Throwable t) {
        // fall through
    }
    // some handling
    logger.error("xxx", t);
}
© www.soinside.com 2019 - 2024. All rights reserved.