Java jackson:如何在运行时使用泛型对类进行解组?
我需要在运行时使用泛型将json字符串解组到类中。比如: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
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需要在运行时解组的类型信息。