泛型类类型java
我想写一个将json映射到java的通用对象,因为需要插入 所以我在做下一个代码泛型类类型java,java,generics,Java,Generics,我想写一个将json映射到java的通用对象,因为需要插入 所以我在做下一个代码 public class JSONConverter<T> { public String getStringJSON(T obj{ ObjectMapper mapper = new ObjectMapper(); if(obj!=null){ try { return mapper.writeValue
public class JSONConverter<T> {
public String getStringJSON(T obj{
ObjectMapper mapper = new ObjectMapper();
if(obj!=null){
try {
return mapper.writeValueAsString(obj);
} catch (IOException e) {
}
}
//mapper.writeValueAsString(obj);
}
public T getObject(String stringJSON){
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(stringJSON, T.class);
}
}
它们使用一些自动方式,我希望有一个类与之类似您需要将
类
作为参数添加到getObject()
方法中,以便能够获取T
的运行时类
类型:
public T getObject(String stringJSON, Class<T> clazz){
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(stringJSON, clazz);
}
public T getObject(字符串stringJSON,类clazz){
ObjectMapper mapper=新的ObjectMapper();
readValue(stringJSON,clazz);
}
另外,重新考虑对该方法的所有引用。由于类型擦除,您不能这样做 可以做的是将泛型类型与接口绑定:
public class JSONConverter<T extends IMyInterface>
您甚至可以对实现
IMyInterface
的类进行注释,以便Jackson在反序列化时知道子类型 你不能那样做。典型地,类型作为参数传递:
public T getObject(String stringJSON, Class<T> clazz){
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(stringJSON, clazz);
}
有时我会使用它来获取NPE,我不推荐使用它。如果在类型定义中捕获了
t
的值,您可以通过以下方式检索它:
class StringConverter扩展了JsonConverter{/。。。
}
Class t=TypeResolver.resolveRawArgument(JsonConverter.Class,StringConverter.Class);
断言t==String.class;
此代码是否编译?否,OP请求帮助使其编译(并正常工作)。您能否演示如何使用您声称的反射来获得T.class?完成。我坚持认为,根据经验,这些方法是不可靠的。
mapper.readValue(stringJSON, IMyInterface.class);
public T getObject(String stringJSON, Class<T> clazz){
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(stringJSON, clazz);
}
private Class<T> type = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass())
.getActualTypeArguments()[0];
class StringConverter extends JsonConverter<String> { //...
}
Class<?> t = TypeResolver.resolveRawArgument(JsonConverter.class, StringConverter.class);
assert t == String.class;