Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Дженерики Java

Универсальные шаблоны Java

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

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

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

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

<час>

Общий класс Java

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

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

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

class Main {
  public static void main(String[] args) {

    // initialize generic class
    // with Integer data
    GenericsClass<Integer> intObj = new GenericsClass<>(5);
    System.out.println("Generic Class returns: " + intObj.getData());

    // initialize generic class
    // with String data
    GenericsClass<String> stringObj = new GenericsClass<>("Java Programming");
    System.out.println("Generic Class returns: " + stringObj.getData());
  }
}

// create a generics class
class GenericsClass<T> {

  // 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;
  }
}

Вывод

Generic Class returns: 5
Generic Class returns: Java Programming

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

class GenericsClass<T> {...}

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

<час>

Универсальный метод Java

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

Вот как мы можем создать универсальный класс в 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.<String>genericsMethod("Java Programming");

    // generics method working with integer
    demo.<Integer>genericsMethod(25);
  }
}

class DemoClass {

  // creae a generics method
  public <T> void genericsMethod(T data) {
    System.out.println("Generics Method:");
    System.out.println("Data Passed: " + data);
  }
}

Вывод

Generics Method:
Data Passed: Java Programming
Generics Method:
Data Passed: 25

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

public <T> void genericMethod(T data) {...}

Здесь параметр типа <T> вставляется после модификатора public и перед возвращаемым типом void .

Мы можем вызвать метод generics, поместив фактический тип <String> и <Integer> внутри скобки перед именем метода.

demo.<String>genericMethod("Java Programming");

demo.<Integer>genericMethod(25);

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

demo.genericsMethod("Java Programming");

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

<час>

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

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

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

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

<T extends A>

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

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

class GenericsClass <T extends Number> {

  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<String> obj = new GenericsClass<>();
  }
}

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

<T extends Number> 

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

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

GenericsClass<String> obj = new GenericsClass<>();
                                                 ^
    reason: inference variable T has incompatible bounds
      equality constraints: String
      lower bounds: Number
  where T is a type-variable:
    T extends Number declared in class GenericsClass
<час>

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

1. Повторное использование кода

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

public <T> void genericsMethod(T data) {...}

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

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

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

// using Generics
GenericsClass<Integer> list = new GenericsClass<>();

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

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

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

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

// creating a string type ArrayList
ArrayList<String> list1 = new ArrayList<>();

// creating a integer type ArrayList
ArrayList<Integer> list2 = new ArrayList<>();

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

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


java

  1. Окончательное ключевое слово Java
  2. Оператор экземпляра Java
  3. Наследование Java
  4. Вложенный статический класс Java
  5. Анонимный класс Java
  6. Одноэлементный класс Java
  7. Java-отражение
  8. Класс Java ArrayList
  9. Класс Java ObjectOutputStream
  10. Класс файла Java