java - 在 Java 中对 finally 的看法

标签 java try-catch finally

<分区>

 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;
    }
}

我想知道上面的代码如何被认为是不好的做法,因为它从 finally 返回。 根据字节码信息,finally不会突然返回,finally中没有设置值。这怎么能算坏呢?

最佳答案

重点是:finally 语句根本没有任何意义。它不会为您的代码增加任何值(value)。这个版本:

try {
 ...
 return true;
} catch (...) {
 log ...
}
return false;

做同样的事;无需让您开始思考:最终有什么用?

换句话说:不要太在意功能;忘记可读性。您希望能够尽快了解正在发生的事情。使用 finally 肯定会让你的“大脑 cpu”旋转得“更难”……只是因为你必须阅读它,然后消化并下定决心“啊,其实我根本不需要那个” ".

当然,这是非常微妙的;但最后:一个充满微妙事物的文件可能会更清晰一些......仍然使文件比它应该的更难阅读!

Finally:不要误会我的意思:在某些情况下,从 finally block 返回可能是有意义的。但是 - 仅当该 block 中发生其他事情时(意味着 真正 无论如何都需要最终 block )。

关于java - 在 Java 中对 finally 的看法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40221280/

相关文章:

javascript - 如何处理 javascript Web 应用程序中由用户引起的错误?

java - 中断的 Java 线程真的可以跳过 finally 子句吗?

java - morris遍历的用例

java - 范围 : Add Class name to Test Success

java - java中如何编译异常

java - try-catch 场景 - 是否正确使用 checked 或 not

java - 如何从显示中删除字符串

java - Spring Boot应用程序运行时如何禁用日志消息?

ruby - Ruby 中 call/cc 和 "ensure"的语义

java - 由于 GC 在线程情况下最终会跳过 block 吗?