Подтвердить что ты не робот

Джексон - десериализация строки JSON - TypeReference vs TypeFactory.constructCollectionType

Чтобы десериализовать строку JSON в список классов, различные способы, перечисленные в qaru.site/info/78285/...

Тип 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>>() { });

Хотя оба этих типа 2 выполняют работу, в чем разница между этими реализациями?

4b9b3361

Ответ 1

После построения JavaType обе функции называют одинаковые десериализационные функции, поэтому единственное различие заключается в том, как обрабатывается общий тип.

Второй является полностью статическим, поэтому тип должен быть известен в компиляторе и не может меняться. Таким образом, это похоже на использование базового литерала класса.

Первый - динамический, поэтому его можно использовать для построения вещей, которые изменяются в зависимости от их параметризации.

Лично я предпочитаю первую альтернативу для всех случаев (он избегает создания еще одного анонимного внутреннего класса), но второй может быть более читаемым.