我正在制作处理JSON的东西。输入格式很灵活,所以我需要经常为不同的类做相同的代码。有没有比我做过的更好的方法呢?
Object part = json.get(0);
File saveTo = new File(dataPath("test.txt"));
if (part.getClass() == JSONObject.class)
((JSONObject)part).save(saveTo, "");
if (part.getClass() == JSONArray.class)
((JSONArray)part).save(saveTo, "");
答案 0 :(得分:1)
夫妻俩:
首先,您应该始终在if
大括号中包装{ }
语句。
Object part = json.get(0);
File saveTo = new File(dataPath("test.txt"));
if (part.getClass() == JSONObject.class){
((JSONObject)part).save(saveTo, "");
}
if (part.getClass() == JSONArray.class){
((JSONArray)part).save(saveTo, "");
}
其次,如果您只希望执行其中一个if
语句,那么您应该使用else if
:
Object part = json.get(0);
File saveTo = new File(dataPath("test.txt"));
if (part.getClass() == JSONObject.class){
((JSONObject)part).save(saveTo, "");
}
else if (part.getClass() == JSONArray.class){
((JSONArray)part).save(saveTo, "");
}
第三,您可以使用instanceof
运算符而不是获取类:
Object part = json.get(0);
File saveTo = new File(dataPath("test.txt"));
if (part instanceof JSONObject){
((JSONObject)part).save(saveTo, "");
}
else if (part instanceof JSONArray){
((JSONArray)part).save(saveTo, "");
}
但要回答您的问题,最好尽量减少此代码,因为JSONObject
和JSONArray
都是Object
的直接子类。如果JSONArray
是JSONObject
的子类,那就更容易了,但事实并非如此。
但如果您发现自己在多个地方编写此代码,则应将其提取到函数中,如下所示:
void saveJsonThing(Object part, File file)
if (part instanceof JSONObject){
((JSONObject)part).save(saveTo, "");
}
else if (part instanceof JSONArray){
((JSONArray)part).save(saveTo, "");
}
else{
//handle error?
}
}
然后,只要需要保存某些内容,您的代码就可以调用该函数:
Object part = json.get(0);
File saveTo = new File(dataPath("test.txt"));
saveJsonThing(part, saveTo);