Загрязнение кучи
В программирования Java языке кучи загрязнение — это ситуация, которая возникает, когда переменная параметризованного типа ссылается на объект, который не принадлежит к этому параметризованному типу. [1] Такая ситуация обычно обнаруживается во время компиляции и обозначается непроверенным предупреждением . [1] Позже, во время выполнения, загрязнение кучи часто вызывает исключение ClassCast Exception . [2]
Загрязнение кучи в Java может произойти, когда аргументы типа и переменные не конкретизируются во время выполнения. В результате разные параметризованные типы реализуются одним и тем же классом или интерфейсом во время выполнения. Все вызовы данного объявления универсального типа имеют одну реализацию во время выполнения . Это приводит к возможности загрязнения кучи. [2]
При определенных условиях переменная параметризованного типа может ссылаться на объект, который не принадлежит к этому параметризованному типу. Переменная всегда будет ссылаться на объект, который является экземпляром класса, реализующего параметризованный тип.
Загрязнение кучи в без varargs контексте
public class HeapPollutionDemo
{
public static void main(String[] args)
{
Set s = new TreeSet<Integer>();
Set<String> ss = s; // unchecked warning
s.add(new Integer(42)); // another unchecked warning
Iterator<String> iter = ss.iterator();
while (iter.hasNext())
{
String str = iter.next(); // ClassCastException thrown
System.out.println(str);
}
}
}
Дальнейшее чтение
[ редактировать ]- Гослинг, Джеймс; Джой, Билл; Стил, Гай; Браха, Гилад; Бакли, Алекс (2014). «4.12.2» . Спецификация языка Java, Java SE 8 Edition . Аддисон-Уэсли. стр. 81–82. ISBN 978-0-13-390069-9 .
- Фризен, Джефф (2011). Начало Java 7 . Голос эксперта по Java. Апресс. п. 211. ИСБН 978-1430239093 .
- Риз, Ричард; Риз, Дженнифер (2012). Справочник новых возможностей Java 7 (PDF) . Пакт Паблишинг. стр. 38–40. ISBN 978-1-84968-562-7 .
- Стензель, Курт; Гранди, Хольгер; Райф, Вольфганг (2008). «Верификация Java-программ с помощью дженериков». Алгебраическая методология и технология программного обеспечения . Конспекты лекций по информатике. Том. 5140. стр. 315–329. дои : 10.1007/978-3-540-79980-1 . ISBN 978-3-540-79979-5 . (требуется подписка)
Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Учебные пособия по Java SE» . Оракул . Проверено 16 июля 2014 г.
- ^ Перейти обратно: а б Лангер, Анжелика. «Часто задаваемые вопросы по Java Generics: загрязнение кучи» . angelikalanger.com/ . Проверено 15 июля 2014 г.