我可以实例化一个超类,并根据提供的参数实例化一个特定的子类

时间:2011-06-21 11:58:10

标签: java javascript json inheritance gson

我正在使用Google的GSON包http://code.google.com/p/google-gson/

我正在将JSON转换为Java。

我有这段代码,我进行转换。

Gson gson = new Gson();
Type collectionType = new TypeToken<Collection<QueryProperty>>() {}.getType();
Collection<QueryProperty> queryProperties = gson.fromJson(query, collectionType);

我的QueryProperty类包含这些字段(带有getter / setter):

int id;
String uri;
String name;
Set<QueryValue> values;
String selected;

QueryValue类具有以下这些字段(带有getter / setter):

int id;
String uri;
String name;

我现在希望能够拥有不同的types QueryValue。

我想添加一个NumericQueryValue类(QueryValue的子类),所以我可以传入一组边界来查询db。

double lower;
double upper;

想要创建一个新的ResourceQueryValue(QueryValue的子类),它看起来和QueryValue一样:

int id;
String uri;
String name;

无论如何我能做到这一点。它有一个通用的QueryValue类,但根据JSON提供的参数返回正确的子类。

如果我不清楚,请告诉我。

2 个答案:

答案 0 :(得分:2)

除了实现自定义反序列化处理之外,Gson目前还没有简单的多态反序列化机制。下一个版本看起来会提供一个内置的解决方案。

上一篇StackOverflow.com问题与解答(有些例子)关于这个主题:

答案 1 :(得分:1)

如果您需要检查值,您会想要创建custom deserializer,如果您只需要根据类型创建实例,则会instance creator