Necesito implementar la serialización JSON para algunos objetos, y he encontrado un problema cuando se trata de integración con colecciones genéricas.Java JSON serialization: mejor práctica
Todas las clases serializables implementar esta interfaz (JSONObject proviene de this biblioteca):
interface JSONSerializable{
public JSONObject dump() throws JSONException //serializes object
public void load(JSONObject obj) throws JSONException //deserializes object
}
Código
para mi colección basada en java.util.List se ve más o menos así:
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
}
}
Mi problema es: cuando cargo AwesomeList desde JSONObject, necesito crear sus elementos pero es imposible ya que java me prohíbe escribir
T newItem = new T();
newItem.load(obj);
¿Cómo debo modificar mi enfoque para esta tarea?
Para ser honesto, no veo cómo esto funciona incluso con conocidos tipos. ¿Está almacenando los nombres de clase en el paquete de datos JSON? – Perception
No, cada objeto sabe cómo cargarse desde JSONObject (de hecho, es solo una matriz asociativa). Actualicé la publicación para mostrar lo que quiero hacer. – KCH