最后在Java中的观点

bor*_*oue 1 java finally try-catch

 public boolean sendDeviceEvent() {
    boolean status = false;
    try {
        device.sendEvent("blah...blah");
        status = true;
    } catch (Exception e) {
        log.error("Failed to send NodeLowBattery Event - {} {}", createNodeLowBatteryNotification(), e.getCause());
    } finally {
        return status;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道上面的代码如何被认为是不好的做法,因为它从最后返回.根据字节码信息,最后不会突然返回,最后没有设置值.怎么会被认为是坏事?

Gho*_*ica 5

关键是:最后声明根本没有任何意义.它没有为您的代码添加任何价值.这个版本:

try {
 ...
 return true;
} catch (...) {
 log ...
}
return false;
Run Code Online (Sandbox Code Playgroud)

是一样的; 没有让你开始思考:最终有什么好处?

换句话说:不要过于依赖功能 ; 并忘记可读性.您希望能够尽快了解正在发生的事情.使用finally肯定会让你的"脑cpu"旋转"更难"...只是因为你必须阅读它,然后消化并解决"啊,实际上我根本不需要它".

当然,这非常微妙; 但最终:一个文件充满了微妙的东西,可能会更清晰......仍然会使文件更难以阅读!

最后:不要误会我的意思:有时候从finally块返回可能有意义.但是 - 只有在该块中发生其他事情时(意味着真正需要最终阻止).