指定されたキーの JSON オブジェクトを検索し、そのキーの JSONObject または String 値を返すことを目的とした次のメソッド定義があります。JSON オブジェクトのすべてのレベルを確実に検索するために、再帰的にしましたが、より深い JSONObject を返すことができる場合のみです。コンパイラは、戻り値の型を宣言したため、これはオブジェクトを返さなければならないと文句を言います。罰金。2 つのケースでオブジェクトを返していますが、状況によっては何も返さないという問題があると思います。最終的な戻り値 false などを追加すると、コンパイラ チェックに合格しますが、このメソッドへの呼び出しは常に (最終的には) false を返し、役に立たなくなります。私はJavaのような厳密に型付けされた言語に慣れていないので、以前に同様の問題に遭遇したことはありません. 任意のポインタをいただければ幸いです。
public Object find(String contentId, JSONObject node) {
JSONObject currentNode = (node != null) ? node : this.txtContent;
Iterator<?> nodeKeys = currentNode.keys();
while ( nodeKeys.hasNext() ){
try {
String key = (String) nodeKeys.next();
if (key.equals(contentId)) {
if (currentNode.get(key) instanceof JSONObject) {
return currentNode.getJSONObject(key);
} else {
return currentNode.getString(key);
}
} else if (currentNode.get(key) instanceof JSONObject) {
find(contentId, currentNode.getJSONObject(key));
}
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
}