最近在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>>(){});
并且只有一件事我不能(仍然......)在这里理解:这里的内部类是什么({}
)?我显然不知道内部类的所有用例,所以我可以在这里使用一些解释。谢谢。
答案 0 :(得分:1)
Java有一种称为类型擦除的东西。这意味着,一旦编译,你的
List<myObject> listOfObjects = new ArrayList<myObject>();
变为
List listOfObjects = new ArrayList();
因此,一旦运行你的程序,杰克逊就无法判断你是否期望找回myObject
的列表。相反,它返回LinkedHashMap
的列表。通过创建扩展TypeReference
的内部类,您迫使Java保留您期望类型为myObject
的列表的事实。