Потому что дженерики в Java — это механизм времени компиляции, а примитивы не являются объектами и не могут быть представлены как Object во время выполнения. Java реализует дженерики через type erasure — это означает, что во время выполнения (runtime) вся информация о типах-параметрах стирается, и дженерик-код превращается в обычный код с использованием Object. Например: List<String> list = new ArrayList<>(); во время выполнения становится просто: List list = new ArrayList(); // тип String "стирается" Поскольку примитивы (int, boolean, char и т.д.) не являются подтипами Object, их нельзя использовать там, где JVM ожидает ссылочный тип. 💡 Компилятор не может заменить int на Object, потому что int — это не объект, а 32-битное значение в стеке или регистре. Если бы List<int> существовал, JVM пришлось бы: Но Java пошла другим путём — ради совместимости и простоты VM. Java предоставляет обёртки (wrapper classes): И автоматически преобразует между ними: List<Integer> list = new ArrayList
Почему нельзя использовать примитивы в дженериках (например, Map<int, int>)?
24 декабря 202524 дек 2025
1
2 мин