我有一个关于异常处理和资源管理的问题,我想知道是否有人可以分享他们的意见。我需要执行一系列操作:读取应用程序设置、设置环境、执行这些操作,然后最终进行清理。清理涉及拆除环境,但这只有在首先成功设置时才会发生。
这是我的第一个(也是蹩脚的)方法:
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
块并使用(双关语?)finally
进行清理。所以这是我的第二次尝试:
try {
readSettings();
setupEnvironment();
// do stuff
} catch (Exception ex) {
logStackTrace(ex);
displayError(ex);
} finally {
teardownEnvironment();
closeCommThreads();
}
为了完成这项工作,我必须删除顺序耦合,teardownEnvironment()
以便可以随时调用它——之前或之后setupEnvironment()
(对于编辑:有什么更好的方法吗?)。这是正确的方法吗?在设置之前拆掉我确实觉得有点奇怪。
编辑:
只是为了让它更明确一点:我通过在内部包含一个额外的检查来删除顺序耦合teardownEnvironment
- 类似于if (!isSetup()) return;
.