我的一般知识不足以理解这一点:
@Override
public <T extends VierOgenEntiteit> List<T> deserializeMutatieList(String jsonString, Class<T> clazz) {
try {
List<T> listWithHasmaps = mapper.readValue(jsonString, new TypeReference<ArrayList<T>>(){});
List<T> listWithEindeDagStand= mapper.readValue(jsonString, new TypeReference<ArrayList<EindeDagStand>>(){});
List<EindeDagStand> listWithHasmaps2 = mapper.readValue(jsonString, new TypeReference<ArrayList<T>>(){});
return listWithEindeDagStand;
} catch (IOException e) {
throw new PicassoRuntimeException("Deserialize van JSON lukt niet " + jsonString, e);
}
}
第一个映射器调用是我想要使用的,但是它返回带有HashMaps的List,这不行。我期待一份EindeDagstand清单。第二个映射器调用返回我想要的结果,但该类是硬编码的。
当我调试我的测试时,我看到 clazz 变量是一个类型为EindeDagStand的java.lang.Class(如预期的那样)。所以我不明白为什么第一个映射器调用给出了另一个结果然后第二个。 T并没有真正解决到运行时的类geuss(但我在调试器中看到它?),我该如何解决?
更新
jtahlborn关于将JavaType用于此特定用例的建议很好,所以喜欢:
JavaType type = mapper.getTypeFactory().constructCollectionType(ArrayList.class, clazz) ;
mapper.readValue(jsonString, type);
但我仍然不明白为什么第一个解决方案没有工作(无论具体的映射器实现如何)。
电贺, 里斯