== Generics ==
Основным мотивом введения Generics Начиная с JDK 1.5, в Java было неудобство работы появляются новые возможности для программирования. Одно из таких нововедений являются Generics.Generics являются аналогией с нетипизированными коллекциямиконструкцией "Шаблонов"(template) в С++, но имеет свои нюансы. Использование нетипизированных коллекций приводит к большим трудозатратамGenerics позволяют абстрагировать множество типов. Наиболее распространенными примерами являются Коллекции. Вот типичное использование такого рода(без Generics): List myIntList = new LinkedList(); // 1 myIntList.add(new Integer(0)); // 2 Integer x = '''(Integer)''' myIntList.iterator().next(); // 3 Как правило, программист знает, нежели типизированныхкакие данные должны быть в List'e.Тем не менее, причем Приведение типа ('''"Cast"''') в строчке 3 имеет важное очень значение. Компилятор может порождать ошибкитолько гарантировать, что Object будет возвращен итератору,но чтобы обеспечить присвоение переменной типа Integer правильным и безопасным, требуется Cast. Эти Cast не только создает беспорядки, но дает возможность появление ошибки обнаруживаются только во время исполнения"Runtime Error" из-за невнимательности программиста. Можно каждый И появляется такой вопрос: "Как с этим бороться? "В частности: "Как же зарезервировать List для определенного типа данных ?" Как разтакую проблему решают Generics. List'''<Integer>''' myIntList = new LinkedList'''<Integer>'''(); // 1’ myIntList.add(new Integer(0)); //2’ Integer x = myIntList.iterator().next(); // 3’ Обратите внимание на объявления типа для переменной myIntList. Он указывает на то, когда требуется коллекциячто это не просто произвольный List, создавать ее типизированный варианта List<Integer>. Это избавляет от проблемМы говорим, связанных с применением коллекцийчто List является generic-интерфейсом, но приводит к большому объему дублированию кодакоторый принимает параметр типа - в этом случае, создаваемого с помощью печально известной технологии copy-pasteInteger. Generic-и позволяют избежать подобных проблем за счет введения специальных параметров типов и обобщения реализации классов и методовКроме того, необходимо обратить внимание на то, что каст выполняется по линии 3' автоматически. Они позволяют Некоторые могут задуматься, что беспорядок в коде увеличился, но это не создавать отдельную копию типизированной коллекции с измененным типом элементатак.Вместо того, а создать единую обобщенную реализациюприведение к Integer в строчке 3, у нас теперь есть Integer в качестве параметра в которой строчке 1'.Тем не менее, есть очень большая разница. Теперь компилятор может проверить тип элемента заменен параметром типана корректность во время компиляции.Когда мы говорим, что myIntList объявлен как List<Integer>, и впоследствии переложить работу по созданию специализированных коллекций на будет это справедливо во всем коде и компиляторэто гарантирует. Эффект от Genarics особенно проявляется в крупных проектах, так как он улучшает читаемость и надежность кода в целом.
== Свойства ==