java - 我可以实例化一个父类(super class)并根据提供的参数实例化一个特定的子类吗

标签 java javascript json inheritance gson

我正在使用谷歌的 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 类以前有这些字段(带有 getters/setters):

int id;
String uri;
String name;

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

我想添加一个 NumericQueryValue 类(QueryValue 的子类),这样我就可以传入一组用于查询数据库的边界。

double lower;
double upper;

并且想要创建一个新的 ResourceQueryValue(QueryValue 的子类),它看起来与 QueryValue 过去一样:

int id;
String uri;
String name;

无论如何我可以完成这项工作吗?它有一个通用的 QueryValue 类,但根据 JSON 提供的参数返回正确的子类。

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

最佳答案

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

StackOverflow.com 上关于此主题的问题和答案(部分带有示例):

关于java - 我可以实例化一个父类(super class)并根据提供的参数实例化一个特定的子类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6424848/

相关文章:

java - 套接字通信协议(protocol)/标准

java - 从字符串中提取变量值

javascript - 使用 parsley.js 验证动态创建的字段

javascript - 如何在 Protractor 中编写 beforeSomeTests?

json - djangorest框架json序列化器

javascript - 如何创建随机方法名称

java - 如何并行处理多个任务并等待每个任务的成功失败

java - 具有多种配置的Spring Boot测试

jquery - 提醒 DOM 位置的代码

java - 在 Android 中发送和接收 json 对象