2

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

このデザインパターンはJavaで可能ですか? もしそうなら、どのように?そうでない場合、なぜですか?

ありがとう!

4

2 に答える 2

11

あなたがリンクしたウィキペディアの同じページには、Java に関するセクションがあります。

したがって、参照されていないオブジェクトの「ファイナライズ」メソッドは、呼び出されないか、オブジェクトが参照されなくなってからしばらくしてから呼び出される可能性があります。したがって、プログラマーはdispose patternのようなものを使用して、リソースを手動で閉じる必要があります。

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();
   }
}

リソースが使用されるたびに、リソースを解放する負担がプログラマにかかります。

Closeable クラスを作成する Java 7 の提案と、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 に答える