gpt4 book ai didi

java - 有没有一种干净的方法可以为 Java 对象提供破坏范围?

转载 作者:行者123 更新时间:2023-11-30 05:51:07 24 4
gpt4 key购买 nike

想象一下 MyOpenedFile 是一些带有打开流的包装文件。然后假设这段代码:

// method in an Util class
static void safeClose(MyOpenedFile f) {
if (f != null) {
try {
f.close();
} catch(IOException ex) { /* add logging or console output */ }
}
}

问题的实际方法:

void doSomeFileOperation(...) throws IOException, ... {
MyOpenedFile f1 = null;
MyOpenedFile f2 = null;
try {

/* method's "business logic" code beings */
f1 = new MyOpenedFile(...);
//do stuff
f2 = new MyOpenedFile(...);
// do stuff
f1.close(); f1 = null;
// do stuff with f1 closed
f2.close(); f2 = null;
// do stuff with f2 closed
/* method's "business logic" code ends */

} finally {
Util.safeClose(f1); f1 = null;
Util.safeClose(f2); f2 = null;
}
}

现在这非常困惑并且特别容易出错(例如,finally block 中的某些代码可能很难在单元测试中调用)。例如在 C++ 中,析构函数将负责清理(由作用域指针析构函数调用或直接调用)并且代码会更清晰。

那么,有没有更好/更好/更干净的方法来包装上面的业务逻辑代码,以便传播任何异常,但文件 f1f2 都会关闭(或者至少两者都尝试关闭,即使它失败了)?

还有指向任何开源库(如 Apache Commons)的答案,欢迎提供良好的包装器。

最佳答案

文件是字符串的包装器,它包含一个可能存在也可能不存在的文件名。它是无状态的,因此您无需关闭它。

您需要关闭的资源是 FileInputStream 或 BufferedReader,您可以在 Java 7 中使用 ARM 隐式关闭它们

try(BufferedReader br = new BufferedReader(new FileReader(file))) {

}

这将在他阻止退出时关闭 br

http://www.oracle.com/technetwork/articles/java/trywithresources-401775.html

关于java - 有没有一种干净的方法可以为 Java 对象提供破坏范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13174905/

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