Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 jackson:如何在运行时使用泛型对类进行解组?_Java_Json_Generics_Jackson_Runtime - Fatal编程技术网

Java jackson:如何在运行时使用泛型对类进行解组?

Java jackson:如何在运行时使用泛型对类进行解组?,java,json,generics,jackson,runtime,Java,Json,Generics,Jackson,Runtime,我需要在运行时使用泛型将json字符串解组到类中。比如: String classname = "this.is.a.class.name.read.at.runtime"; Class cls = Class.forName(classname); mapper.readValue(jsonPayload, new TypeReference<GenericClass<cls>>() {}); String classname=“this.is.a.class.nam

我需要在运行时使用泛型将json字符串解组到类中。比如:

String classname = "this.is.a.class.name.read.at.runtime";
Class cls = Class.forName(classname);
mapper.readValue(jsonPayload, new TypeReference<GenericClass<cls>>() {});
String classname=“this.is.a.class.name.read.at.runtime”;
Class cls=Class.forName(classname);
readValue(jsonPayload,newTypeReference(){});

显然,上述方法不起作用,我无法找到一个好的解决方案。

以下代码解决了我的问题:

String genericParameterClassName = "this.is.a.class.name.read.at.runtime";
Class clazz = Class.forName(genericParameterClassName);
JavaType = mapper.getTypeFactory().constructParametrizedType(GenericClass.class,GenericClass.class,clazz);
GenericClass m = mapper.readValue(jsonPayload, type);

以下代码解决了我的问题:

String genericParameterClassName = "this.is.a.class.name.read.at.runtime";
Class clazz = Class.forName(genericParameterClassName);
JavaType = mapper.getTypeFactory().constructParametrizedType(GenericClass.class,GenericClass.class,clazz);
GenericClass m = mapper.readValue(jsonPayload, type);

mapper.readValue(jsonPayload,cls)
不起作用?不,因为我的类是GenericClass,而不是cls。所以您正在尝试解组
TypeReference
的一个实例,该实例用
GenericClass
参数化,该实例用某种类型参数化?如果这就是你想要实现的,那么我认为这是不可能的。泛型类的类型信息是编译时概念。但是jackson需要在运行时解组的类型信息,以及
mapper.readValue(jsonPayload,cls)
不起作用?不,因为我的类是GenericClass,而不是cls。所以您正在尝试解组
TypeReference
的一个实例,该实例用
GenericClass
参数化,该实例用某种类型参数化?如果这就是你想要实现的,那么我认为这是不可能的。泛型类的类型信息是编译时概念。但是jackson需要在运行时解组的类型信息。