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

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

我正在将JSON转换为Java。

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

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

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

 int id; String uri; String name; Set 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提供的参数返回正确的子类。

如果我不清楚请告诉我。

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

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

  • 使用未知编译时类型反序列化通用,其中字段指示类型
  • 对于具有GSON的字段,没有特定结构的Parse JSON
  • 使用google gson进行json对象序列化/反序列化
  • 与gson的多态性

听起来好像要在需要检查值时创建自定义反序列化器 ,或者如果只需要根据类型创建实例,则需要创建实例创建者 。