2

http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization

这种设计模式在 Java 中可行吗?如果是这样,怎么做?如果不是,为什么不呢?

谢谢!

4

2 回答 2

11

您链接到的同一个维基百科页面有一个关于 Java 的部分,引用:

因此,未引用对象的“finalize”方法可能永远不会被调用或仅在对象变得未引用后很久才调用。因此,资源必须由程序员手动关闭,使用类似dispose 模式的东西。

void java_example() {
  // open file (acquire resource)
  final LogFile logfile = new LogFile("logfile.txt");

  try {
      logfile.write("hello logfile!");

      // continue using logfile ...
      // throw exceptions or return without worrying about closing the log;
      // it is closed automatically when exiting this block
   } finally {
      // explicitly release the resource
      logfile.close();
   }
}

每次使用资源时,释放资源的负担都落在程序员身上。

我认为 Java 7 有一个提案,它将创建 Closeable 类,并为try块提供一些语法糖以使其更简洁(但您仍然必须编写该try块)。

于 2010-01-12T12:17:18.890 回答
1

对于同一范围内的多个资源收购,您将需要本文中经过精心设计的稳健方法:

http://www.javalobby.org/java/forums/t19048.html

总结如下。

final Connection conn = ...;
try {
    final Statement stmt = ...;
    try {
        final ResultSet rset = ...;
        try {
            //use resources.
        }
        finally {rset.close();}
    }
    finally {stmt.close();}
}
finally {conn.close();}

请阅读原始链接以了解为什么它需要这样,以及为什么其他答案中提出的其他任何内容都不够。

于 2011-02-01T23:02:22.923 回答