2011-07-13 9 views
5

Java 7の新しいTry-with-Resource構文では、リソースの順序について心配する必要がありますか?Java 7でリソースを試してみませんか?

try (InputStream in = loadInput(...); // <--- can these be in any order? 
    OutputStream out = createOutput(...)){ 
    copy(in, out); 
} 
catch (Exception e) { 
    // Problem reading and writing streams. 
    // Or problem opening one of them. 
    // If compound error closing streams occurs, it will be recorded on this exception 
    // as a "suppressedException". 
} 
+1

リソースが*お互いに依存している場合は、彼らのやり方について)。そうでなければ...いいえ。 –

答えて

7

通常のtry {create resources} finally {close resources}構文を使用する際に問題が発生した場合にのみ、問題が発生します。最初に取得されたリソースは、最後に閉じられます。詳細はthe technotesを参照してください。

0

実際に注文することはまったく関係ありません。理想的には、リソースが関連していない場合、それらを任意の順序で開くことができ、任意の順序で閉じることができます。

リソースが関連している場合は、まずConnectionを作成してPreparedStatementを作成するなどの手順に従う必要がありますが、私は何の証拠もありませんが、依存関係の問題を避けるために、

0

リソースのオープンは、オープンされている別のリソースに依存します。たとえば、BのオープニングにAを開く必要がある場合は、Aを最初に開いてください。注目すべきもう一つは、リソースがオープンされた順序と逆の順序でリソースがクローズされることです。たとえば、AとBを開いた場合、try-with-resourcesを閉じると、Bが最初に閉じてAが続きます。

関連する問題