java 泛型 构造函数_java-在构造函数上使用具有规范的泛型类型

如何在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这样支持它可能告诉我,我不应该这样做,但是这并不能阻止我对此感到疑惑.

你可能感兴趣的:(java,泛型,构造函数)