Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: bytecode

Как generics реализованы в Java на уровне байткода?

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

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

На уровне байткода generics реализованы через стирание типов и приведение типов. Компилятор добавляет cast там, где это необходимо. JVM не знает о generics и работает с обычными типами. Дополнительная информация о generics хранится только в metadata класса. Типовая безопасность обеспечивается на этапе компиляции.

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

Хотя generics выглядят как часть языка, JVM о них почти ничего не знает.

Определение

Реализация generics в Java основана на type erasure и добавлении проверок типов компилятором.

Что попадает в байткод

Компилятор выполняет несколько шагов.

  1. Стирание типов

    • T → Object

    • T extends Number → Number

  2. Добавление приведения типов

    • Object → конкретный тип при чтении

Пример:

List<String> list = new ArrayList<>();
String s = list.get(0);

Фактически в байткоде:

Object o = list.get(0);
String s = (String) o;

Где всё-таки хранится информация о generics

Хотя JVM не использует generics, информация о них сохраняется:

  1. В class-файле

  2. В metadata

  3. Доступна через reflection (getGenericType)

Эта информация:

  • не влияет на выполнение

  • используется инструментами и фреймворками

Почему возможен ClassCastException

Если generics нарушены через raw-типы:

List list = new ArrayList<String>();
list.add(10);

Ошибка возникнет:

  • не при добавлении

  • а при чтении элемента

Вывод

Generics — это механизм compile-time безопасности. В runtime они реализуются через обычные типы и приведения.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Java

    Java

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

#bytecode

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