一連のステートメントができるとしましょう。
try {
String a = getProperty("a");
String b = getProperty("b");
String c = getProperty("c");
} catch(Exception e) {
}
ここで、プロパティbが見つからず、関数が例外をスローしたとします。この場合、プロパティごとにtry-catchブロックを記述せずに、続行するか、bをnullに設定するにはどうすればよいですか?つまり、a、b、cは存在しますが、例外がスローされている間はまったく見つからない場合があります。
プロパティが見つからないときにnullを返すように関数を変更できないと仮定すると、特に取得可能なすべての値を取得したい場合は、すべてを独自のtrycatchブロックでラップすることになります。 (失敗した最初の値で操作全体をキャンセルするのとは対照的です。)
取得するこれらのプロパティがたくさんある場合は、使用するヘルパーメソッドを作成する方がクリーンな場合があります。
String getPropertySafely(String key) {
try {
return getProperty(key);
} catch (Exception e) {
return null;
}
}
各ステートメントの周りにtry-catchを配置する必要があります。続行はありません(VBの_ON ERROR ... RESUME
_ブロックにあるように)。の代わりに:
_String a = null;
try {
a = getProperty("a");
} catch(Exception e) {
...
}
String b = null;
try {
b = getProperty("b");
} catch(Exception e) {
...
}
String c = null;
try {
c = getProperty("c");
} catch(Exception e) {
...
}
_
あなたは書くことができます:
_public String getPropertyNoException(String name) {
try {
return getProperty(name);
} catch (Exception e) {
return null;
}
}
_
個人的には、getProperty()
は、必要なこの余分な定型文すべてに対して例外をスローするのに適していないと思います。
毎回同じ関数を使用しているので、これをループに入れることができるかもしれません:
String[] abc = new String[3];
String[] param = {"a", "b", "c"};
for (int i = 0; i < 3; i++) {
try {
abc[i] = getProperty(param[i]);
} catch(Exception e) {
}
}
しかし、これはかなり不自然であり、多数のプロパティにのみ役立ちます。単純に3回のtry-catchを書く必要があると思います。
getProperty
を使用する予定がある場合は、それを行う簡単な方法がないため、それらの処理方法を再検討する必要があります。
finally
ステートメントを利用できますが、それでもすべての呼び出しにtry-catch
が必要です。