4. Особенности массивов и коллекций
• Массивы: В Java массивы ковариантны. Это означает, что массив Integer[]
считается подтипом Number[]. Это позволяет присвоить массив целых чисел переменной типа массив чисел, но попытка записать в такой массив Double
приведет к ошибке ArrayStoreException
во время выполнения.
• Коллекции и Дженерики: В отличие от массивов, обобщения (generics) инвариантны. List<Integer>
не является подтипом List<Number>.
◦ Стирание типов (Type Erasure): Обобщения реализованы через стирание типов. Это означает, что List<Integer>
и List<String>
во время выполнения представлены одним и тем же классом List. Процесс компиляции заменяет параметры типов на их границы (или Object) и вставляет явные приведения типов (касты) там, где это необходимо.
◦ Unchecked casts: Преобразование "сырого" типа (raw type) в параметризованный тип вызывает предупреждение компилятора (unchecked warning), так как компилятор не может гарантировать безопасность типов.

