【发布时间】:2016-11-15 07:01:29
【问题描述】:
在一些 Java 类中,我看到声明为实例变量的 IO 资源并在多个方法中使用。如何关闭它们?很少建议 finalize(),他们也说不推荐。我可以知道是否有更好的方法。 例如:
public class test{
private PrintWriter writer=null;
public test(){
createWriter();
}
public void log(){
writer.write("test");
writer.flush();
}
public void createWriter(){
writer=new PrintWriter(new BufferedWriter(new FileWriter("file")));
}
}
【问题讨论】:
-
我只是像包装其他 Streams 和 Writers 的所有标准 Streams 和 Writers 一样:使该类实现 Closeable,因此有一个 close() 方法可以由 try-with 自动调用-资源声明。当然,还要记录下来。
-
谢谢!这个问题来自具有大型代码库的现有项目。我是否需要在创建对象的任何地方更改(添加尝试),或者是否有任何其他方式可以关闭它而无需在此之外进行任何更改类。
-
您不必强制使用 try-with-resources 语句。另一种方法是在 finally 块中关闭。但是在不更改代码的情况下,您无法做任何事情来神奇地调用 close()。
-
知道了。谢谢。我想弄清楚我是否可以在不做任何更改的情况下做到这一点(比如添加 finalize() 或任何其他替代方法) .将继续尝试资源。再次感谢。:)