0

JSONObject の 1 つのメソッドをオーバーライドすることを達成したいと考えています。したがって、要素が 1 つであっても、常にリストを返します。

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

public class JSONObjectDecorator extends JSONObject {

    public JSONObjectDecorator(JSONObject jsonObject) {
        super(jsonObject, JSONObject.getNames(jsonObject));
    }

    @Override
    public List<String> get(String field){
        List<String> result = new ArrayList<String>();
        if (!isNull(field)) {
            Object data = get(field);
            if (data instanceof JSONArray) {
                JSONArray array = (JSONArray) data;
                for (int i=0; i< array.length(); i++){
                    result.add(array.getString(i));
                }
            } else {
                result.add(data.toString());
            }
        }
        return result;
    }    

}

現在、このコードは次の行のために StackOverflowError を返します。

Object data = get(field);

どうすればこれを達成できますか?

更新: なぜそれが StackOverflowError なのかはわかっています。@Andy Turner が強調表示したように、super.get がコンストラクターの問題を解決しますが、たとえば、JSONObjectDecorator のインスタンスで getString() を呼び出すと、フィールドが文字列ではないという例外がスローされます。 . (リストなので、おそらく「getString」は「get」を呼び出します)

JSONObjectで「get(String field)」が呼び出された場所を確認します。解決策は、これらのメソッドもオーバーライドすることだと思います。

4

0 に答える 0