2012-03-13 12 views
0

安全にリソースを閉じて例外を伝播する必要があります。これまでのところ私は2つの解決策を思いついた。ファイルを閉じて例外を同時に伝播する適切な方法

ソリューション1

FileObject sourceDir = null; 
FileObject targetDir = null; 
BufferedWriter bw = null; 
BufferedReader br = null; 

try { 
    // R/W operation with files 
} finally { 
    // close sourceDir, targetDir, br, bw 
} 

ので、私はないんだけど、私は第二の溶液中throw eが好きではありませんが、try-finallyは私には少し変わったようだ2

FileObject sourceDir = null; 
FileObject targetDir = null; 
BufferedWriter bw = null; 
BufferedReader br = null; 

try { 
    // R/W operation with files 
} catch (IOException e) { 
    throw e; 
} finally { 
    // close sourceDir, targetDir, br, bw 
} 

ソリューションこれらのどれを使うべきかを確かめてください。それとももっと良い方法がありますか?

+1

ソリューション2はソリューション1と同じです。これは、catchブロックにコードを追加する(例:例外をログに記録する)場合にのみ異なります。 –

+0

私は知っているが、例外を再び投げることは不要なコードです。この場合、私はここにログしたくない...私はtry-finallyが大丈夫かどうかを知りたい。 – user219882

+0

はい、それは絶対にokです。 2つのコードスニペットの動作が異なると思われるかもしれません。 –

答えて

1

オプション1は大丈夫です。それには通常try ... finallyが使用されます。

あなたのtryブロックにreturnを入れても、Javaがfinallyを処理してから戻ることがあります。

2

例外をログに記録したい場合や、実行時例外にラップしてスローする場合は、2番目の解決策が役立ちます。

関連する問題