我的代码逻辑如下:
// 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 更好吗?
我不会仅仅为了简化代码而抛出异常。像这样合并它们怎么样:
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);
}