【发布时间】:2011-09-24 15:28:35
【问题描述】:
我需要为一些对象实现 JSON 序列化,在与泛型集合集成时遇到了问题。
所有可序列化的类都实现了这个接口(JSONObject来自this库):
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
}
}
我的问题是:当我从 JSONObject 加载 AwesomeList 时,我需要创建它的元素,但这是不可能的,因为 java 禁止我写
T newItem = new T();
newItem.load(obj);
我应该如何修改完成这项任务的方法?
【问题讨论】:
-
老实说,我看不出它是如何与已知类型一起工作的。您是否将类名存储在 JSON 数据包中?
-
不,每个对象都知道如何从 JSONObject 加载自己(它实际上只是关联数组)。我更新了帖子以显示我想做什么。
标签: java json design-patterns