杰克逊 - Deserialising JSON串 - TypeReference VS TypeFactory.constructCollectionType

问题描述:

要deserialise JSON字符串类别的列表,在列出的不同的方式* question杰克逊 - Deserialising JSON串 - TypeReference VS TypeFactory.constructCollectionType

类型1(docs link):

List<SomeClass> someClassList = mapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class)); 

类型2(docs link ):

List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { }); 

虽然上述两种类型都做这项工作,但这些实现之间有什么区别?

构建JavaType后,两者都调用相同的反序列化功能,所以唯一的区别是处理泛型类型的方式。

第二个是完全静态的,所以在编译类型中必须知道类型,并且不能改变。所以它类似于使用基本的类文字。

第一个是动态的,所以它可以用来构造不同参数化的东西。我个人更喜欢所有情况下的第一个选择(它避免了创建一个更多的匿名内部类),但是第二个可能更具可读性。