Java 使用内部类的Jackson类型引用

Java 使用内部类的Jackson类型引用,java,json,generics,jackson,Java,Json,Generics,Jackson,最近我使用了Jackson的TypeReference对象,但在Java中转换时遇到了问题。情况是这样的: List<myObject> listOfObjects = new ArrayList<myObject>(); listOfObjects = mapper.readValue(connection.getInputStream(), new ArrayList.class); List listOfObjects=new ArrayList(); list

最近我使用了Jackson的TypeReference对象,但在Java中转换时遇到了问题。情况是这样的:

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

listOfObjects = mapper.readValue(connection.getInputStream(), new ArrayList.class);
List listOfObjects=new ArrayList();
listOfObjects=mapper.readValue(connection.getInputStream(),新的ArrayList.class);
正在引发一个异常,LinkedHashMap无法强制转换到myObject中。我现在明白它有什么问题了,因为有一个乐于助人的人告诉我使用TypeReference。我将第二行替换为:

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

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

Java有一种叫做类型擦除的东西。这意味着,一旦编译,您的

List<myObject> listOfObjects = new ArrayList<myObject>();
因此,一旦运行您的程序,Jackson就无法判断您是否希望返回
myObject
s的列表。相反,它返回
LinkedHashMap
s的列表。通过创建一个扩展
TypeReference
的内部类,您强制Java保留一个事实,即您需要一个类型列表
myObject


有关作者的解释,请参见此处:

很好的解释可能重复,谢谢。我在几分钟前找到了你链接的内容,但是在发布了问题之后,因此即使我已经知道答案,你的努力也会得到回报。在发布问题之前,我真的应该开始更加努力,因为这不是第一次:(谢谢!@fge我刚刚在谷歌上找到了第一个问题。解决了这个问题。没什么不同。
List listOfObjects = new ArrayList();