Вопрос проверяет знание практических приёмов работы с Jackson и generics.
TypeReference используется для передачи информации о generic-типах в runtime.
Он позволяет обойти ограничения type erasure.
Чаще всего применяется при десериализации коллекций.
Работает за счёт анонимных классов.
Без него Jackson не знает реальный тип элементов.
TypeReference — это инфраструктурный механизм, а не «магия».
TypeReference<T> — это класс Jackson, предназначенный для сохранения информации о параметризованном типе.
Ключевая идея:
создаётся анонимный подкласс
generic-тип фиксируется в сигнатуре класса
информация доступна через reflection
Пример:
TypeReference<List<User>> ref =
new TypeReference<List<User>>() {};
List<T>
Map<String, T>
вложенные generic-типы
Пример:
Map<String, List<User>> data =
objectMapper.readValue(
json,
new TypeReference<Map<String, List<User>>>() {}
);
при десериализации в конкретный класс
при отсутствии generic-параметров
TypeReference — стандартный способ корректно передать Jackson информацию о generic-типах.