为不同的 类 执行相同的功能
Executing same functions for different classes
我正在制作处理 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, "");
两件事:
首先,您应该始终将 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
运算符而不是获取 class:
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
都是 [=22= 的直接子 classes ].如果 JSONArray
是 JSONObject
的子 class 会更容易,但事实并非如此。
但是如果你发现自己在多个地方写这段代码,你应该把它提取到一个函数中,像这样:
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);
我正在制作处理 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, "");
两件事:
首先,您应该始终将 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
运算符而不是获取 class:
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
都是 [=22= 的直接子 classes ].如果 JSONArray
是 JSONObject
的子 class 会更容易,但事实并非如此。
但是如果你发现自己在多个地方写这段代码,你应该把它提取到一个函数中,像这样:
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);