为不同的 类 执行相同的功能

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, "");
}

但是为了回答你的问题,没有一个很好的方法来最小化这段代码,因为 JSONObjectJSONArray 都是 [=22= 的直接子 classes ].如果 JSONArrayJSONObject 的子 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);