Мне нужно реализовать сериализацию JSON для некоторых объектов, и я столкнулся с проблемой, когда дело дошло до интеграции с коллекциями generic.
Все сериализуемые классы реализуют этот интерфейс (JSONObject исходит из этой библиотеки):
interface JSONSerializable{
public JSONObject dump() throws JSONException //serializes object
public void load(JSONObject obj) throws JSONException //deserializes object
}
Код моей коллекции на основе java.util.list выглядит примерно так:
class AwesomeList<T extends JSONSerializable> implements JSONSerializable{
private LinkedList<T> items = new LinkedList<T>();
...
...
public JSONObject dump() throws JSONException {
JSONObject result = new JSONObject();
JSONArray a = new JSONArray();
for(T i : items){
a.put(i.dump());
}
result.put("items", a);
return result;
}
public void load(JSONObject obj) throws JSONException{
//here is my problem
}
}
Моя проблема: когда я загружаю AwesomeList из JSONObject, мне нужно создать его элементы, но это невозможно, поскольку java запрещает мне писать
T newItem = new T();
newItem.load(obj);
Как мне изменить свой подход к этой задаче?