私はJavaでの私のJSON-APIとしてtapestry-json
を使用するようになってる:JavaでRuntimeExceptionsを投げた関数呼び出しを無視する方法は?
import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.json.JSONArray;
は残念ながらJSONArray
からJSONObject
Sを読み込むためのoptJSONObject(int)
-methodはありません。インデックスまたは値はJSONObjectされていない場合、値がない場合の方法getJSONObject(int)
は... RuntimeException
をスローします。
ここではすべてのエントリを無視したいと思います。したがって私はtry-catch-blockでそれをラップしました。
JSONArray arr = new JSONArray("...");
for(int i = 0; i < arr.length(); i++) {
JSONObject currentEntry;
try {
// RuntimeException is thrown, if there is no value for the index or if the value is not a JSONObject.
currentEntry = arr.getJSONObject(i);
} catch (RuntimeException e) {
// Ignore this entry
continue;
}
/*
if(... currentEntry ...) {
}
*/
}
私にとって、この解決法はおそらくそうでなければならないと思われます。 RuntimeExceptionsを無視するよりエレガントな方法はありますか?
オブジェクトを取得して、それが 'JSONObject'かどうかを確認するだけで済みます。まだ醜いです(もちろん、 'instanceof'、* ugh ... *を使用します。ただし、そのライブラリにはいくつかのユーティリティがあります)、少なくとも例外による制御フローは避けてください。 IMHOこのクラスのデザインはあまりよくありません、それは要素が何であるかを確認する方法を提供する必要があります。 – Ordous
制御フローとして例外処理を使用しないでください。コードが不必要に複雑になります。 – ryanyuyu