5

Java 7 の新しい Try-with-Resources 構文では、リソースの順序を気にする必要がありますか?

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".
} 
4

4 に答える 4

7

通常のtry{createresources}最後に{closeresources}構文を使用する場合にのみ、順序が重要になります。最初に取得したリソースは最後に閉鎖されます。詳細については、技術情報を参照してください。

于 2011-07-13T03:16:17.217 に答える
1

あなたの例では、順序はまったく重要ではありません。リソースは、両方が既に使用可能な try ブロックでのみ使用します。データベースに接続する場合、順序または開始が重要ですが、それをカバーする別の方法を作成します。このメソッドは、AutoClosable を実装し、メソッド close() をオーバーライドする必要があります。close() は例外をスローしますが、メソッドは例外をスローする必要はありません。

于 2019-02-02T17:45:17.007 に答える
0

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

リソースが関連している場合は、それらを作成する順序に従う必要があります。たとえば、最初に Connection を作成してから PreparedStatement を作成します。証拠はありませんが、Java は依存関係の問題を回避するために FIFO の順序でリソースを閉じると思います。

于 2012-11-05T23:43:51.840 に答える
0

リソースを開くことが、開いている別のリソースに依存するかどうかは重要です。たとえば、B を開くには A を開く必要がある場合、A を最初に開く必要があることは明らかです。もう 1 つの注意点は、リソースが開かれた順序とは逆の順序で閉じられることです。たとえば、A を開いてから B を開いた場合、try-with-resources がそれらを閉じると、B が最初に閉じられ、次に A が閉じられます。

于 2012-11-25T15:19:44.227 に答える