如何在Java中正确执行以下操作?我想要一个可以创建对象列表的通用例程.在此例程中,我希望这些对象的类的构造函数支持特定的参数.
为了澄清:我希望该例程创建一个List< T>.从JSON字符串.这是较大的反序列化代码的一部分.如果我可以以某种方式指定每个受支持的T实现给定JSONObject的创建T的构造函数,那么我可以编写如下例程:
interface CreatableFromJSONObject {
T(JSONObject object); // Complains about missing return type.
}
static List jsonArrayToList(JSONArray array) {
List result = new ArrayList();
for (int i = 0; i < array.length; ++i) {
JSONObject jsonObject = array.getJSONObject(i);
result.add(T(jsonObject)); // If T has one constructor with 1 one argument JSONObject
}
return result;
}
然后是实现该接口的示例类
class SomeClass implements CreatableFromJSONObject {
SomeClass(JSONObject object) throws JSONException {
// implementation here
}
}
我可以使用所需的方法:
List list = jsonArrayToList(someJSONArray);
那么,实现此目标的最佳方法是什么?
我目前的最佳尝试是:
public static List jsonArrayToList(final JSONArray jsonArray, Constructor fromJSONObjectConstructor) {
List result = new ArrayList();
try {
for (int i = 0; i < jsonArray.length(); i++) {
result.add(fromJSONObjectConstructor.newInstance(jsonArray.getJSONObject(i)));
}
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (JSONException e) {
throw new RuntimeException(e);
}
return result;
}
然后添加到此方法应支持的每个类中:
public class SomeClass {
public static final Constructor jsonObjectConstructor;
static {
try {
jsonObjectConstructor = CafellowEntity.class.getConstructor(JSONObject.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
SomeClass(JSONObject object) throws JSONException {
// Implementation here
}
}
我用作
List list = jsonArrayToList(myJSONArray, SomeClass.jsonObjectConstructor);
除了根本不使用泛型实现,我只想将这几行代码(实际上是在我需要的特定地方在例程中完成工作)放在两行代码中,这是我能提供的最漂亮的解决方案类.
有什么建议么?与其他解决方案相比,该性能如何?通过不像Java这样支持它可能告诉我,我不应该这样做,但是这并不能阻止我对此感到疑惑.