«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему массивы не могут содержать общие элементы в Java?

Почему массивы не могут содержать общие элементы в Java?

Опубликовано 18 ноября 2024 г.
Просматривать:141

Why Can\'t Arrays Hold Generic Items in Java?

Могут ли массивы содержать общие элементы?

Общие типы и массивы могут по-разному взаимодействовать в Java. Рассмотрим следующий код:

ArrayList a = new ArrayList();

Этот код успешно компилируется, создавая общий ArrayList с именем a. Однако следующий код не удалось скомпилировать:

ArrayList[] a = new ArrayList[10];

Почему это? Похоже, что массивы и дженерики несовместимы. Чтобы понять это, давайте изучим стирание типов в Java.

Стирание типов: за кулисами

При компиляции Java выполняется стирание типов, которое заменяет информацию об общем типе на необработанные типы (Объект). Это предотвращает такие ошибки, как размещение строки в ArrayList целых чисел. Однако для массивов требуется необработанный тип, а дженерики не могут быть представлены как необработанные типы.

Устранение проблемы с массивом

Чтобы создать массив универсальных элементов, вы можете явно приведите массив к нужному типу:

ArrayList[] a = (ArrayList[]) new ArrayList[10];

Это приведение указывает компилятору, что массив следует рассматривать как массив ArrayLists с ключевыми элементами.

Список списков: исключение

В Java список списков не считается массивом. Следовательно, следующий код компилируется без приведения типов:

ArrayList> b = new ArrayList>();

Это различие возникает из-за того, что ArrayList не является массивом type.

Заключение

Массивы и универсальные типы имеют ограничения в Java из-за стирания типов. Однако путем явного приведения массивов к желаемому универсальному типу или использования списков списков можно обойти эти ограничения и эффективно использовать универсальные типы в обоих контекстах.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3