我正在尝试创建一个使用 Jackson 来反序列化 POJO 的类。
看起来像这样...
public class DeserialiserImp<T> implements Deserialiser<T> {
protected ObjectMapper objectMapper = new ObjectMapper();
@Override
public T get(String content, Class clazz) throws IOException {
return (T) objectMapper.readValue(content, clazz);
}
@Override
public List<T> getList(String content, Class clazz) throws IOException {
return objectMapper.readValue(content, TypeFactory.collectionType(ArrayList.class, clazz));
}
}
我对这个实现有两个问题。
第一个是我将类类型传递到方法中,以便对象映射器知道应该反序列化的类型。使用泛型有更好的方法吗?
另外,在 get 方法中,我将从 objectMapper 返回的对象转换为 T。这看起来特别令人讨厌,因为我必须在这里转换 T,然后我还必须从调用它的方法转换对象类型。
我在这个项目中使用 Roboguice,所以如果我可以通过注入更改类型,然后注释我需要它返回的通用类型的对象,那就太好了。我读到类型文字并想知道它是否可以解决这个问题?
第一个是我将类类型传递到方法中,因此
objectmapper 知道应该反序列化的类型。有没有更好的
使用泛型的方式?
不幸的是不是,这是因为类型擦除。
另外,在 get 方法中,我正在转换从
objectMapper 到 T。这似乎是特别令人讨厌的方式,因为我
必须在这里转换 T 然后我还必须转换对象类型
调用它的方法。
改为这样做:
@Override
public T get(String content, Class<T> clazz) throws IOException {
return objectMapper.readValue(content, clazz);
}
我在这个项目中使用 Roboguice,所以如果可以的话那就太好了
通过注入改变类型,然后注释该对象
我需要它返回的通用类型。我读到了 TypeLiteral 和
想知道是否可以解决这个问题?
我不太明白你想要实现什么,但既然你无论如何都需要通过课程,那还有可能吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)