http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
このデザインパターンはJavaで可能ですか? もしそうなら、どのように?そうでない場合、なぜですか?
ありがとう!
http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
このデザインパターンはJavaで可能ですか? もしそうなら、どのように?そうでない場合、なぜですか?
ありがとう!
あなたがリンクしたウィキペディアの同じページには、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
)。
同じスコープ内で複数のリソースを取得する場合は、記事内で堅牢になるように慎重に設計されたアプローチが必要になります。
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();}
元のリンクを読んで、このようにする必要がある理由と、他の回答で提案されているような他のものが十分でない理由を理解してください。