gpt4 book ai didi

java - 你弄脏之前会打扫卫生吗?将清理代码放入 finally block 中

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:37 25 4
gpt4 key购买 nike

我有一个关于异常处理和资源管理的问题,我想知道是否有人可以分享他们的意见。我需要执行一系列操作:读取应用程序设置、设置环境、执行相关操作,然后最终进行清理。清理涉及拆除环境,但这只有在首先成功设置的情况下才会发生。

这是我的第一个(也是蹩脚的)方法:

try {
readSettings();
setupEnvironment();
} catch (Exception ex) {
logStackTrace(ex);
displayError(ex);
closeCommThreads();
return;
}

try {
// do stuff
} catch (Exception ex) {
logStackTrace(ex);
displayError(ex);
} finally {
teardownEnvironment();
closeCommThreads();
}

这似乎有点难看,所以我决定寻找更好的解决方案。我做了一些背景阅读,很多文章投票支持更大的 try/catch block 并使用(双关语?)finally 进行清理。所以这是我的第二次尝试:

try {
readSettings();
setupEnvironment();
// do stuff
} catch (Exception ex) {
logStackTrace(ex);
displayError(ex);
} finally {
teardownEnvironment();
closeCommThreads();
}

为了完成这项工作,我必须从 teardownEnvironment() 中移除顺序耦合,以便可以随时调用它 - 在 setupEnvironment() 之前或之后(对于编辑:任何更好的表达方式?)。这是正确的方法吗?我确实觉得在设置之前拆掉有点奇怪。

编辑:

只是为了让它更明确一点:我通过在 teardownEnvironment 中包含一个额外的检查来移除顺序耦合 - 类似于 if (!isSetup()) return;

最佳答案

如果两种方式都能达到您的目的,那么都不是。

在我看来,第二种方法(大 try/catch/finally block )更易于阅读,因为您没有在方法主体某处的 catch block 中“隐藏”返回语句。

此外,我认为消除方法(拆解、设置)之间的相互依赖性通常是一种很好的做法(例如,您可以独立地对这些方法进行单元测试)。如果没有任何设置,只需退出拆解 - 无需对此感到奇怪:)

关于java - 你弄脏之前会打扫卫生吗?将清理代码放入 finally block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4284864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com