Java – перспективный и относительно простой в освоении язык программирования. Его может освоить даже новичок в соответствующей сфере. Несмотря на то, что Джава – это «способ общения» с программным обеспечением и «железом» устройства типа ООП, работать с ним не составляет никакого труда.
Данный вариант идеально подходит для:
- игрового софта;
- «серьезных» программ и утилит;
- веб-программирования.
Последнее направление является наиболее популярным. Web-programming – основная стезя Джава-семейства. Тип языка, при помощи которого можно писать браузерные расширения. Обладает разнообразными функциями и возможностями. Некоторые элементы семейства требуют отдельного внимания. Пример – дженерики (generic). О них мы расскажем далее в статье.
Преимущества Джавы: что учесть новичку
Но сначала стоит обратить внимание на некоторые особенности выбранного типа «способа общения» с программным обеспечением. Джава обладает существенными преимуществами перед остальными вариантами:
- простой и понятный синтаксис;
- быстрое осваивание «с нуля»;
- не требует никаких навыков программирования – подойдет даже тем, кто далек от информационных технологий;
- наличие ООП;
- дополнительные библиотеки;
- собственный движок, а также наличие множества платформ для создания игрового контента;
- относительно небольшие исходные коды получаемых приложений;
- свободное распространение.
Пользователи, решившие работать с соответствующим типом language, будут сталкиваться с принципом «меньше писать, больше выполнять». Посредством циклов и других функций удается значительно уменьшить размер исходной кодификации. Проверять ее работоспособность тоже будет не слишком трудно.
Терминологический вопрос – основные понятия
Перед тем, как рассмотрим дженерики в Джаве, необходимо разобраться с некоторыми понятиями в программировании. Соответствующие данные пригодятся как новичкам, так и тем, кто уже пытался создавать собственные утилиты.
Запомнить рекомендуется следующую информацию:
- алгоритм – правила и инструкции, их сочетания, предназначенные для решения поставленной задачи;
- API (интерфейс программирования) – правила, процедуры, протоколы, необходимые при создании программного софта;
- аргументы – значения, передаваемые в функции и команды;
- символы – минимальные единицы отображения данных, равные одной букве или символу;
- класс – шаблон, описывающий тот или иной объект в программировании, набор элементов с общими свойствами;
- константы – тип значений, не изменяемых в процессе выполнения программной кодификации;
- типы данных – классификация информации того или иного характера;
- массивы – группы и списки (пример — list integer) схожих типов значений информации, подлежащие группировке;
- декларация – оператор, описывающий переменные, функции и иные идентификаторы;
- фреймворк – готовый пример кода, используемый при создании собственных приложений;
- цикл – последовательность инструкций, отвечающих за выполнение одних и тех же манипуляций несколько раз;
- операнд – объекты, которыми можно манипулировать;
- оператор – элемент кода, управляющий теми или иными операндами;
- переменная – элементарное хранилище информации при создании кодификаций;
- методы – функции и процедуры, которые относятся к тому или иному типу/классу объектов, своеобразные действия, которые «умеет» выполнять элемент кода.
Отдельное внимание необходимо уделить понятию дженерика. С его использованием программирование на Джаве стало значительно проще. И разобраться с соответствующим элементом при грамотном подходе не составит никакого труда. Для лучшего понимания рекомендуется обладать хотя бы первоначальными навыками программирования.
Дженерик – что это такое
При использовании string и других объектов в процессе коддинга, разработчики задействуют всевозможные классы, методы и типы информации. Для каждого варианта разрабатывались собственные алгоритмы и решения.
Java, начиная с 1995 года, активно развивался, дорабатывался, совершенствовался. Так появились дженерики. Впервые о них услышали в Java 5. С тех пор подобные элементы весьма активно применяются на практике.
Generic – понятие обширное. Обозначает языковые возможности (функции), позволяющие применять на практике универсальные методы и типы. Своеобразное обобщение.
Общие типы отличаются от обычных:
- до появления дженериков программеры использовали коллекции для хранения всех типов объектов;
- начиная с Java 5, за счет generics объекты делятся и хранятся «обособлено» друг от друга.
Иногда тип данных ввода не выступает в качестве фиксированного. Указываемыми единицами информации могут служить string, числа (с плавающими запятыми в том числе), буквенные записи. Для ввода переменной правильного (нужного) типа требуется внедрить предварительные проверки. Если же воспользоваться дженериками, соответствующая операция проведется автоматически в процессе компиляции. Тип данных будет установлен по умолчанию. Используется эта «функция» весьма активно, особенно продвинутыми разработчиками.
Кратко о главном в дженериках: наглядное пособие
Generic носит название родовых типов. Соответствующие элементы позволяют безопасно пользоваться классами коллекций. Лучше всего изучать их на наглядных образцах кодификаций. Вот пример кода без дженериков:
Здесь происходит следующее:
- компиляция при запуске утилиты осуществляется нормально;
- ClassCastException будет брошен в процессе исполнения кода;
- один из объектов выступает как integer, а должен являться string.
В Java 5 и более поздних версиях стал актуален следующий код:
В процессе создания списка (list string, new arraylist) указано, что тип элементов, задействованных в нем – это string. Если попытаться добавить иные варианты, при компиляции пользователь увидит на экране сообщение об ошибке.
В цикле for приведение типов не используется. О ClassCastException можно не беспокоиться. Программа заработает исправно.
Способы применения
Что собой представляют дженерики в Джаве, понятно. Но для того, чтобы лучше в них разбираться, требуется обозначить сферы применения оных. Существуют различные варианты развития событий. Наглядные примеры помогут лучше усвоить соответствующий материал даже новичкам.
На данный момент generic может использоваться следующими способами:
- типовыми классами;
- интерфейсами;
- методами;
- конструкторами.
Также имеют место при наследовании. Далее каждый вариант будет рассмотрен более подробно. Приведенные примеры – это лишь шаблоны, на которые рекомендуется опираться при самостоятельном изучении выбранного направления.
Типовые классы
Класс будет называться generic, если он отвечает за объявления одной или нескольких переменных типа (string, int и так далее). Соответствующие виды принято называть параметрами типа класса Джава. Чтобы лучше понимать их, стоит рассмотреть пример.
class Genericclass{
private Object x;
public void set(Object x) { this.x = x; }
public Object get() { return x; }
}
Здесь происходит следующее:
- создается класс со свойством X;
- тип свойства – это объект;
- после инициализации класс применяется только этим конкретным типом.
Так, если хочется, чтобы экземпляр класса имел значение типа string, программисту предстоит установить и получить единственный string. В предложенном примере соответствующих ограничений нет. Связано это с тем, что произошло объявление типа свойства для объекта. Разработчики способны устанавливать любые элементы и ждать любой «вид» возвращаемого значения при активации метода get.
Приведенный выше пример позволяет применять обозначенное ранее ограничение. При подобных обстоятельствах разработчик может быть уверен в том, что класс задействуют максимально грамотно и правильно.
Вот самый простой пример Genericclass:
Genericclass<String> instance = new Genericclass<String>();
instance.set("Edureka");
instance.set(10); //
Подобный вариант актуален и для интерфейсов.
Интерфейсы и классы – как используют generic
Для того, чтобы облегчить коддинг, можно использовать при описании интерфейсов и classes generics. Для этого применяются угловые скобочки (<>). Они помогают указывать «разновидность» параметра задействованного объекта.
Вот вариант создания class без generics:
package ua.com.prologistic;
public class OldSchool {
private Object t;
public Object get() {
return t;
}
public void set(Object t) {
this.t = t;
}
public static void main(String args[]){
OldSchool type = new OldSchool ();
type.set("Str");
String str = (String) type.get(); //приведение типов может стать причиной ClassCastException
}
}
Здесь при применении class не нужно приводить «вид» объекта. В случае с generics кодификация получит такую интерпретацию:
package ua.com.prologistic;
public class GenericsType<T> {
private T t;
public T get(){
return this.t;
}
public void set(T t1){
this.t=t1;
}
public static void main(String args[]){
GenericsType<String> type = new GenericsType<>();
type.set("Str"); //ошибок не будет
GenericsType type1 = new GenericsType();
type1.set("Str"); //код нормально выполнится
type1.set(10); //работа автоупаковки
}
}
Происходит следующее:
- за classcastexception в main() беспокоиться не нужно – «мейн» выступает методов GenericsType;
- если отказаться от соответствующей прописи, компилятор сообщит об этом.
В последнем случае имеет место следующий расклад:
- type не прописывается при создании экземпляра class;
- автоматически type получает «значение» object;
- string можно использовать в качестве objects, как и иные элементы new integer.
В конечном итоге придется прибегнуть к приведению types. Им выступит OldSchool из предложенного примера.
Только интерфейс
Интерфейс Comparable – хороший пример применения рассматриваемого элемента в программировании. Выглядит код так:
На основе этого варианта можно освоить принципы функционирования generics в Джаве относительно интерфейсов, без дополнительных составляющих. Это – база, помогающая применять рассматриваемый элемент в classes и interface. Еще и при помощи задействования нескольких параметров. Пример – интерфейс map. Подойдет string вида:
New hashMap<String, list<string>>().
Методы-конструкторы
Еще один вариант развития событий актуален, когда нет необходимости в параметризации всего класса. При подобных обстоятельствах рассмотренные ранее примеры теряют свою актуальность. Можно значительно упростить процесс написания исходного кода за счет применения generics исключительно в методах или конструкторах.
Вот пример, который поможет разобраться, как реализовывается соответствующий подход:
Как можно заметить, приведенная кодификация предусматривает два способа применения. Один – обычный, другой – максимально простой. Остановиться программист может на том, который кажется ему наиболее комфортным, удобным.
Внимание: не всегда упрощенный вариант подходит при написании контента. В основном он встречается в элементарных приложениях. Для сложных проектов рекомендуется пользоваться «обычным» способом представления generics в методах/конструкторах.
Вопрос наследования
Джава – современный, удобный, продвинутый язык, оснащенный огромным функционалом. Здесь дозволено назначать переменные других переменных. Такой расклад возможен, когда первый элемент выступает в качестве подкласса второго.
Для реализации подобных приемов используется наследование. Код имеет примерно следующую структуру:
package ua.com.prologistic;
public class GenericsInheritance {
public static void main(String[] args) {
String str = "abc";
Object obj = new Object();
obj = str; // работает, потому что String выступает как наследник Object
MyClass<String> myClass1 = new MyClass<String>();
MyClass<Object> myClass2 = new MyClass<Object>();
myClass2 = myClass1; // компиляции не будет, MyClass<String> не выступает как MyClass<Object>
obj = myClass1; // MyClass<T> наследник Object
}
public static class MyClass<T>{}
}
Дженерики в Java – это удобно и практично. Но разработчикам требуется выяснить, как происходит понимание программного кода и его унификация. Соответствующий спектр знаний поможет отслеживать ошибки, если они имеются, а также избегать оные.
Соглашение об именовании – в помощь разработчику
Generics имеют собственное соглашение об именовании. Это – некий «свод правил», который применяется при внедрении рассматриваемого элемента в кодификацию. Выражаются преимущественно прописными буквами, за счет чего удается без особых затруднений отделить оные от переменных в Джаве.
Соглашение об именовании весьма обширное. Там нет «заумных» фраз типа «extends number, int I, public static t» и так далее. В основном дело предстоит иметь с «самостоятельными буквами». Чаще всего на практике встречаются следующие варианты:
- K – ключ (имеет место в map);
- T – тип;
- E – элемент (имеет широкое распространение в Java Collection Framework);
- B – значение (тоже встречается в map);
- S, U, V и так далее – 2-ой, 3-ий, 4-ый…тип.
Больше информации можно узнать из сопутствующей документации. У Java с ней проблем нет, как и у generic. Также помощи всегда можно попросить у продвинутых разработчиков – комьюнити Джавы весьма лояльно и дружелюбно к новичкам.
Курсы – лучший подход к изучению
Что такое generic в Java, понятно. Это – метод обобщения, который упрощает коддинг. Иногда «с нуля» освоить его бывает проблематично. В таком случае целесообразно посетить специализированные компьютерные курсы.
Опытные специалисты и современные программисты расскажут, что такое public static void, interfaces, generic, t extends и не только. Материал подается в понятной и удобной форме. Возможно дистанционное обучение. Можно выбрать узкую специализацию или рассмотреть выбранное направление всесторонне. Имеются курсы как для новичков, так и для более опытных программеров.
Дженерики Java – это не так трудно, если грамотно подойти к изучению темы. Курсы доступны всем желающим. В конце обучения выдаются сертификаты установленного образца.