我想实现我在JSONObject中覆盖一个方法。所以它总是返回一个列表,即使它有一个元素:
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()时,它会抛出一个异常,即该字段不是String。 (因为它是List,可能是&#34; getString&#34;调用&#34; get&#34;)
我会检查&#34; get(String field)&#34;在JSONObject中调用,我认为解决方案也将覆盖这些方法。