使用内部类的Jackson TypeReference

时间:2014-03-17 15:48:15

标签: java json generics jackson

最近在Java中出现问题时我使用了Jackson的TypeReference对象。情况看起来很喜欢这个:

List<myObject> listOfObjects = new ArrayList<myObject>();

listOfObjects = mapper.readValue(connection.getInputStream(), new ArrayList.class);

抛出了一个异常,即LinkedHashMap无法转换为myObject。我现在明白,在SO上的一些有用的人告诉我使用TypeReference后,它出了什么问题。我用第二行代替:

listOfObjects = mapper.readValue(connection.getInputStream(), new TypeReference<List<myObject>>(){});

并且只有一件事我不能(仍然......)在这里理解:这里的内部类是什么({})?我显然不知道内部类的所有用例,所以我可以在这里使用一些解释。谢谢。

1 个答案:

答案 0 :(得分:1)

Java有一种称为类型擦除的东西。这意味着,一旦编译,你的

List<myObject> listOfObjects = new ArrayList<myObject>();

变为

List listOfObjects = new ArrayList();

因此,一旦运行你的程序,杰克逊就无法判断你是否期望找回myObject的列表。相反,它返回LinkedHashMap的列表。通过创建扩展TypeReference的内部类,您迫使Java保留您期望类型为myObject的列表的事实。

请参阅作者的解释:http://fasterxml.github.io/jackson-core/javadoc/2.0.4/com/fasterxml/jackson/core/type/TypeReference.html