Могут ли массивы содержать общие элементы?
Общие типы и массивы могут по-разному взаимодействовать в 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