Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以实例化一个超类并根据提供的参数实例化一个特定的子类吗_Java_Javascript_Json_Inheritance_Gson - Fatal编程技术网

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

Java 我可以实例化一个超类并根据提供的参数实例化一个特定的子类吗,java,javascript,json,inheritance,gson,Java,Javascript,Json,Inheritance,Gson,我正在使用谷歌的GSON软件包 我正在将JSON转换为Java 我有一段代码,我在那里进行转换 Gson gson = new Gson(); Type collectionType = new TypeToken<Collection<QueryProperty>>() {}.getType(); Collection<QueryProperty> queryProperties = gson.fromJson(query, collectionType);

我正在使用谷歌的GSON软件包

我正在将JSON转换为Java

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

Gson gson = new Gson();
Type collectionType = new TypeToken<Collection<QueryProperty>>() {}.getType();
Collection<QueryProperty> queryProperties = gson.fromJson(query, collectionType);
我现在希望能够拥有不同类型的QueryValue

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

double lower;
double upper;
并希望创建一个新的ResourceQueryValue(QueryValue的子类),它看起来与QueryValue用于:

int id;
String uri;
String name;
不管怎样,我都能做到这一点。也就是说,它有一个通用的QueryValue类,但根据JSON提供的参数返回正确的子类


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

如果您需要检查值,或者如果您只需要基于类型创建实例,则听起来您想创建一个。

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

先前StackOverflow.com关于此主题的问答(部分附有示例):


谢谢Kaj,出于某种原因,我错过了实例创建者的解释。我认为这可能是一条路。定制InstanceCreator可能不是我们要走的路。InstanceCreator用于创建具有默认值的对象,而不是用于自定义反序列化处理。请注意,默认情况下,它们甚至没有对反序列化上下文的引用——因为它们不用于替换自定义反序列化程序。InstanceCreators在您必须使用特定构造函数的情况下非常有用,而且出于某些原因,Gson不能使用无参数构造函数(它可以有效地使用无参数构造函数,即使它不是由编码人员或编译器提供的)。感谢所有的指针,使用Jackson可能是最简单的解决方案(阅读此文)
double lower;
double upper;
int id;
String uri;
String name;