Массивы и коллекции являются reified (овеществленные) или non-reified типами?

Массивы и коллекции являются reified (овеществленные) или non-reified типами?


Ответы (1 шт):

Автор решения: Qwertiy

Ну вроде там понятно написано:

Вторым важным отличием массивов от обобщенных типов является то, что массивы являются типами, доступными при выполнении (reified) [25, 4.7]. Это значит, что массивы знают тип элементов во время выполнения и обеспечивают его. Как было сказано ранее, попытавшись сохранить String в массив Long, вы получите исключение ArrayStoreException. Обобщенные типы, напротив, реализуются с использованием затирания (erasure) [25,4.6]. Это значит, что они обеспечивают ограничения на типы только на этапе компиляции, а затем отбрасывают (или затирают) информацию о типах элементов при выполнении. Затирание позволяет обобщенным типам свободно взаимодействовать со старым кодом, который не использует обобщенные типы (раздел 5.1), обеспечивая плавный переход к обобщенным типам в Java 5.


Во всех generic'ах типы удаляются при компиляции, но массив - это не generic.

Соответственно массивы - reified, всё остальное - нет.

Впрочем, никогда не встречал эту терминологию по отношению к дажаве.

https://ideone.com/06F923
https://ideone.com/ETa1Nb

→ Ссылка