Ответ
Heap pollution возникает, когда параметризованный тип содержит объекты несовместимого типа из-за unchecked-операций, обычно при работе с raw-типами или varargs. Это может привести к ClassCastException во время выполнения.
Пример:
List<String> strings = new ArrayList<>();
List rawList = strings;
rawList.add(1); // Heap pollution - добавили Integer в List<String>
String s = strings.get(0); // ClassCastException при runtime
Основные причины:
- Смешение generic и non-generic кода
- Использование varargs с generic-типами
- Непроверенные приведения типов
Для предотвращения:
- Избегайте raw-типов
- Используйте
@SafeVarargsдля вариативных generic-методов - Включайте предупреждения
-Xlint:unchecked