Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: objectmapper, generics

Как ObjectMapper десериализует коллекции с generic-типами?

Вопрос проверяет понимание ограничений generics в runtime и того, как библиотеки обходят type erasure.

Короткий ответ

ObjectMapper не может сам определить generic-типы во время выполнения.
Из-за type erasure информация о параметрах типов теряется.
Поэтому тип нужно передавать явно.
Для этого используются специальные конструкции Jackson.
Без этого десериализация приведёт к сырым типам или ошибкам.

Длинный ответ

Jackson вынужден работать в условиях отсутствия информации о generic-типах в runtime.

Проблема generics

При попытке:

List<User> users = objectMapper.readValue(json, List.class);

Jackson:

  • знает только List

  • не знает, что элементы — User

В результате:

  • элементы десериализуются как LinkedHashMap

Как Jackson решает проблему

Jackson принимает описание типа, а не сам класс:

  • через TypeReference

  • через JavaType

Пример с TypeReference

List<User> users =
    objectMapper.readValue(
        json,
        new TypeReference<List<User>>() {}
    );

Здесь:

  • анонимный класс сохраняет информацию о типе

  • Jackson извлекает generic-параметры через reflection

Альтернативный способ

JavaType type = objectMapper
    .getTypeFactory()
    .constructCollectionType(List.class, User.class);

List<User> users = objectMapper.readValue(json, type);

Вывод

Для корректной десериализации generic-коллекций Jacksonу нужно явно передать информацию о параметрах типов.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Java

    Java

Ключевые слова

#objectmapper

#generics

Подпишись на Java Developer в телеграм