Обобщения Java (с примерами)

В этом руководстве мы узнаем о Java Generics, о том, как создать класс и методы для generics, а также о его преимуществах с помощью примеров.

Java Generics позволяет нам создать единый класс, интерфейс и метод, которые можно использовать с разными типами данных (объектов).

Это помогает нам повторно использовать наш код.

Примечание : Дженерики не работает с примитивными типами ( int, float, charи т.д.).

Класс Java Generics

Мы можем создать класс, который можно использовать с любым типом данных. Такой класс известен как Generics Class.

Вот как мы можем создать класс универсальных шаблонов в Java:

Пример: создание класса Generics

 class Main ( public static void main(String() args) ( // initialize generic class // with Integer data GenericsClass intObj = new GenericsClass(5); System.out.println("Generic Class returns: " + intObj.getData()); // initialize generic class // with String data GenericsClass stringObj = new GenericsClass("Java Programming"); System.out.println("Generic Class returns: " + stringObj.getData()); ) ) // create a generics class class GenericsClass ( // variable of T type private T data; public GenericsClass(T data) ( this.data = data; ) // method that return T type variable public T getData() ( return this.data; ) )

Вывод

 Общий класс возвращает: 5 Возвращает общий класс: программирование на Java

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

 class GenericsClass (… )

Здесь буква T внутри угловой скобки указывает параметр типа . Внутри Mainкласса мы создали два объекта GenericsClass

  • intObj - Здесь параметр типа T заменяется на Integer. Теперь GenericsClass работает с целочисленными данными.
  • stringObj - здесь параметр типа T заменяется на String. Теперь GenericsClass работает со строковыми данными.

Метод Java Generics

Подобно универсальному классу, мы также можем создать метод, который можно использовать с любым типом данных. Такой класс известен как Generics Method.

Вот как мы можем создать класс универсальных шаблонов в Java:

Пример: создание универсального метода

 class Main ( public static void main(String() args) ( // initialize the class with Integer data DemoClass demo = new DemoClass(); // generics method working with String demo.genericsMethod("Java Programming"); // generics method working with integer demo.genericsMethod(25); ) ) class DemoClass ( // creae a generics method public void genericsMethod(T data) ( System.out.println("Generics Method:"); System.out.println("Data Passed: " + data); ) )

Вывод

 Обобщенный метод: Данные переданы: Обобщенный метод программирования Java: Передано данных: 25

В приведенном выше примере мы создали универсальный метод с именем genericsMethod.

 public void genericMethod(T data) (… )

Здесь параметр типа вставляется после модификатора publicи перед типом возвращаемого значения void.

Мы можем вызвать метод дженериков, помещая фактический тип и внутри кронштейна перед именем метода.

 demo.genericMethod("Java Programming"); demo.genericMethod(25);

Примечание : мы можем вызвать метод generics без включения параметра типа. Например,

 demo.genericsMethod("Java Programming");

В этом случае компилятор может сопоставить параметр типа на основе значения, переданного методу.

Ограниченные типы

Обычно параметр типа может принимать любые типы данных (кроме примитивных типов).

Однако, если мы хотим использовать универсальные шаблоны только для некоторых конкретных типов (например, принимать данные числовых типов), мы можем использовать ограниченные типы.

В случае связанных типов мы используем extendsключевое слово. Например,

 

Это означает, что T может принимать только данные, которые являются подтипами A.

Пример: ограниченные типы

 class GenericsClass ( public void display() ( System.out.println("This is a bounded type generics class."); ) ) class Main ( public static void main(String() args) ( // create an object of GenericsClass GenericsClass obj = new GenericsClass(); ) )

В приведенном выше примере мы создали класс с именем GenericsClass. Обратите внимание на выражение, обратите внимание на выражение

  

Здесь GenericsClass создается с ограниченным типом. Это означает , что GenericsClass может работать только с типами данных, которые дети Number( Integer, Double, и так далее).

Однако мы создали объект класса дженериков с помощью String. В этом случае мы получим следующую ошибку.

GenericsClass obj = новый GenericsClass (); причина: переменная вывода T имеет несовместимые границы ограничения равенства: нижние границы строки: число, где T - переменная типа: T расширяет число, объявленное в классе GenericsClass

Преимущества Java Generics

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

С помощью дженериков в Java мы можем написать код, который будет работать с разными типами данных. Например,

 public void genericsMethod(T data) (… )

Здесь мы создали метод дженериков. Этот же метод можно использовать для выполнения операций с целочисленными данными, строковыми данными и т. Д.

2. Проверка типов во время компиляции

Параметр типа универсальных шаблонов предоставляет информацию о типе данных, используемых в коде универсальных шаблонов. Например,

 // using Generics GenericsClass list = new GenericsClass();

Здесь мы знаем, что GenericsClass работает Integerтолько с данными.

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

3. Используется с коллекциями

Фреймворк коллекций использует концепцию дженериков в Java. Например,

 // creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();

В приведенном выше примере мы использовали один и тот же класс ArrayList для работы с разными типами данных.

Аналогично ArrayList, другие коллекции ( LinkedList, Queue, Maps, и т.д.) также являются родовыми в Java.

Интересные статьи...