Рубрики
Без рубрики

Что такое дженерики в Java? Руководство для начинающих по изучению дженериков

Эта статья о дженериках в Java даст краткое представление о том, что такое дженерики java и их различные типы, а также примеры.

Автор оригинала: Neha.

Рассмотрим пример, в котором вам нужно составить список живых существ в определенной местности. Не имеет значения, человек это, животное или растение. Все, что имеет значение, – это живое существо. В этом случае вы бы сгруппировали их всех как “Живые существа” и не классифицировали их. Аналогично, когда вам нужно хранить какие-то данные, для вас важно содержимое, а не тип данных, и именно здесь вы используете универсальные методы. Универсальные языки в Java-это языковая функция, которая позволяет использовать универсальные типы и методы.

Что такое дженерики в Java?

Generics – термин, обозначающий набор языковых функций, связанных с определением и использованием универсальных типов и методов. Универсальные методы Java отличаются от обычных типов и методов данных. До появления дженериков мы использовали коллекцию для хранения объектов любого типа, т. е. непатентованных . Теперь универсальные шаблоны заставляют Java-программиста хранить определенный тип объектов.

Теперь, когда вы знаете, что такое дженерики в Java, давайте двинемся дальше и поймем, зачем вам нужны дженерики Java.

Почему дженерики Java?

Если вы посмотрите на классы Java collection framework, то заметите, что большинство классов принимают параметр/аргумент типа Object. В принципе, в этой форме они могут принимать любой тип Java в качестве аргумента и возвращать один и тот же объект или аргумент. Они по существу неоднородны , т. е. не имеют сходного типа.

Они по существу || неоднородны||, т. е. не имеют сходного типа.

Иногда в приложении Java тип входных данных не является фиксированным. Вход может быть целым числом , с плавающей точкой или строка Java . Чтобы назначить входные данные переменной правильного типа данных, необходимо было провести предварительные проверки. В традиционном подходе после ввода данных тип входных данных проверялся, а затем присваивался переменной нужного типа данных. При использовании этой логики длина кода и время выполнения увеличивались. Чтобы избежать этого, Были введены дженерики . Когда вы используете универсальные шаблоны, параметры в коде автоматически проверяются во время компиляции, и он устанавливает тип данных по умолчанию. Итак, вот где вам нужна концепция дженериков в Java.

Теперь, когда вы получили некоторое представление о универсальных кодах, давайте продвинемся вперед и рассмотрим различные способы применения универсальных кодов к исходному коду.

Типы обобщений Java

Существует 4 различных способа применения дженериков в Java, и они заключаются в следующем:

  1. Класс универсального Типа
  2. Универсальный Интерфейс
  3. Общий Метод
  4. Универсальный Конструктор

Теперь давайте разберемся, как обобщения могут быть применены к классу типов в глубине.

1. Класс универсального Типа

Класс считается универсальным, если он объявляет одну или несколько переменных типа. Эти типы переменных известны как параметры типа класса Java. Давайте разберемся в этом с помощью примера. В приведенном ниже примере я создам класс с одним свойством x и типом свойства является объект.

class Genericclass{
private Object x;
public void set(Object x) { this.x = x; }
public Object get() { return x; }
}

Здесь, как только вы инициализируете класс определенным типом, класс должен использоваться только с этим конкретным типом. Например, если вы хотите, чтобы один экземпляр класса содержал значение x типа ‘ String ‘, то программист должен установить и получить единственный строковый тип. Поскольку я объявил тип свойства Object, нет способа применить это ограничение. Программист может задать любой объект и может ожидать любого типа возвращаемого значения от метода get , поскольку все типы Java являются подтипами класса объектов.

Для обеспечения соблюдения этого типа ограничений мы можем использовать универсальные методы, как показано ниже:

class Genericclass {
//T stands for "Type"
private T x;
public void set(T x) { this.x = x; }
public T get() { return x; }
}

Теперь вы можете быть уверены, что класс не будет использоваться неправильно с неправильными типами. Простой пример “общего класса” выглядит так, как показано ниже:

Genericclass instance = new Genericclass();
instance.set("Edureka");
instance.set(10); //This will raise compile time error

Так вот как это работает. Эта аналогия справедлива и для интерфейса. Давайте быстро рассмотрим пример, чтобы понять, как информация о типах обобщений может использоваться в интерфейсах на java.

2. Универсальный Интерфейс

Интерфейс в Java относится к абстрактным типам данных. Они позволяют управлять коллекциями Java независимо от деталей их представления. Кроме того, они образуют иерархию в объектно-ориентированном программировании языках. Давайте разберемся, как универсальный тип может быть применен к интерфейсам в Java.

//Generic interface definition
interface GenericInterface
{
T2 PerformExecution(T1 x);
T1 ReverseExecution(T2 x);
}

//A class implementing generic interface
class Genericclass implements GenericInterface
{
public Integer PerformExecution(String x)
{
//execution code
}
public String ReverseExecution(Integer x)
{
//execution code
}
}

Я надеюсь, что вы смогли понять, как универсальные типы могут быть применены к классу типов и интерфейсам. Теперь давайте углубимся в эту статью и поймем, насколько она полезна для методов и конструкторов.

3. Общие Методы

Универсальные методы во многом похожи на универсальные классы. Они отличаются друг от друга только в одном аспекте: информация о области или типе находится только внутри метода. Универсальные методы вводят свои собственные параметры типа.

Давайте разберемся в этом на примере. Ниже приведен пример универсального метода, который можно использовать для поиска всех вхождений параметров типа в списке переменных.

public static  int countAllOccurrences(T[] list, T element) {
int count = 0;
if (element == null) {
for ( T listElement : list )
if (listElement == null)
count++;
}
else {
for ( T listElement : list )
if (element.equals(listElement))
count++;
}
return count;
}

Если вы передадите список строк для поиска в этом методе, он будет работать нормально. Но если вы попытаетесь найти число в списке строк, это приведет к ошибке во время компиляции.

Эта аналогия аналогична и конструктору. Давайте возьмем пример универсального конструктора и поймем, как он работает.

4. Универсальный Конструктор

Конструктор – это блок кода, который инициализирует вновь созданный объект. конструктор напоминает метод экземпляра в Java но это не метод, так как у него нет возвращаемого типа. Конструктор имеет то же имя, что и класс, и выглядит так в коде Java. Теперь давайте возьмем пример и поймем, как это работает.

class Dimension
{
private T length;
private T width;
private T height;

//Generic constructor
public Dimension(T length, T width, T height)
{
super();
this.length = length;
this.width = width;
this.height = height;
}
}

В приведенном выше примере конструктор класса измерений содержит информацию о типе. Таким образом, у вас может быть экземпляр измерения со всеми атрибутами только одного типа. Итак, вот как вы можете использовать конструкторы универсальных типов. Я надеюсь, вы поняли типы дженериков в Java.

Теперь давайте двинемся дальше и рассмотрим преимущества дженериков в Java.

Преимущества дженериков в Java

1. Возможность повторного использования Кода

Вы можете создать стратегию, класс или интерфейс один раз и использовать их для любого типа или любым способом, который вам нужен.

2. Кастинг отдельных типов не требуется

В принципе, вы каждый раз восстанавливали информацию из ArrayList, вам нужно ее типизировать. Типизация при каждой задаче восстановления-это серьезная мигрень. Чтобы искоренить этот подход, были введены дженерики.

3. Реализация нестандартного алгоритма

Он может вычислять алгоритмы, которые работают с различными типами элементов, которые также являются типобезопасными.

Это было все о преимуществах дженериков Java. На этом мы подходим к концу этой статьи о дженериках в Java. Я надеюсь, что вы нашли его информативным и помогли вам в понимании универсалий Java.

У вас есть к нам вопрос? Пожалуйста, укажите это в разделе комментариев этой статьи, и мы свяжемся с вами как можно скорее.

Оригинал: “https://www.codementor.io/@nehavaidya/what-is-generics-in-java-a-beginners-guide-to-learn-generics-w371wnbcv”