オブジェクトのコレクションに対していくつかのステップを実行する別のクラスによって呼び出されているメソッドがあります。具体的には、ファイルのリストを元の場所から新しいフォルダーにコピーしています。ファイルがコピーされた後、ファイルのグループに関連する追加データでデータベースを更新します。これは次のようになります。
public void copyFilesAndStore(File[] files, DataObject additionalData){
for (File f in files){
copyFileToDestination(f);
}
updateDatabase(additionalData);
}
問題は、ファイルの1つに問題がある場合、copyFileToDestination(File f)メソッドがさまざまなIOExceptionをスローする可能性があることですが、ファイルの1つに例外がある場合でも、残りのファイルをコピーし続けたいと思います。ファイルを作成し、データベースを更新するための呼び出しを行います。だから私はこのようなことをすることができます:
public void copyFilesAndStore(File[] files, DataObject additionalData){
for (File f in files){
try {
copyFileToDestination(f);
} catch (IOException ex) {
log(ex);
}
}
updateDatabase(additionalData);
}
ただし、copyFilesAndStore()を呼び出すクラスは、コピーが成功したかどうかを知る必要がありますが、このメソッド内のすべての例外をキャッチすると、それらについてはわかりません。以下のようなことをするのはまったく意味がありますか、それとも私はより良い解決策を逃していますか?
public void copyFilesAndStore(File[] files, DataObject additionalData){
IOException encounteredException = null;
for (File f in files){
try {
copyFileToDestination(f);
} catch (IOException ex) {
log(ex);
encounteredException = ex;
}
}
updateDatabase(additionalData);
if (encounteredException != null)
throw(encounteredException);
}