类型1(docs链接):
List<SomeClass> someClassList = mapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class));
类型2(docs链接):
List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { });
尽管以上两种类型都能完成任务,但这些实现之间有什么区别?
构造之后JavaType,两者都调用相同的反序列化功能,因此唯一的区别是泛型类型的处理方式。
JavaType
第二个是完全静态的,因此类型必须在编译类型中是已知的,并且不能改变。因此,它类似于使用基本Class文字。
第一个是动态的,因此可以用于构造因其参数设置而变化的事物。
就我个人而言,我更喜欢在所有情况下都采用第一种方法(它避免了创建另一个匿名内部类),但是第二种方法可能更具可读性。