Учебники

Java Generics — Методы

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

  • Все объявления обобщенных методов имеют раздел параметров типа, ограниченный угловыми скобками (<и>), который предшествует типу возврата метода (<E> в следующем примере).

  • Каждый раздел параметров типа содержит один или несколько параметров типа, разделенных запятыми. Параметр типа, также известный как переменная типа, является идентификатором, который задает имя общего типа.

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

  • Тело универсального метода объявляется как тело любого другого метода. Обратите внимание, что параметры типа могут представлять только ссылочные типы, а не примитивные типы (такие как int, double и char).

Все объявления обобщенных методов имеют раздел параметров типа, ограниченный угловыми скобками (<и>), который предшествует типу возврата метода (<E> в следующем примере).

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

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

Тело универсального метода объявляется как тело любого другого метода. Обратите внимание, что параметры типа могут представлять только ссылочные типы, а не примитивные типы (такие как int, double и char).

пример

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

Live Demo

public class GenericMethodTest {
   // generic method printArray
   public static < E > void printArray( E[] inputArray ) {
      // Display array elements
      for(E element : inputArray) {
         System.out.printf("%s ", element);
      }
      System.out.println();
   }

   public static void main(String args[]) {
      // Create arrays of Integer, Double and Character
      Integer[] intArray = { 1, 2, 3, 4, 5 };
      Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
      Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

      System.out.println("Array integerArray contains:");
      printArray(intArray);   // pass an Integer array

      System.out.println("\nArray doubleArray contains:");
      printArray(doubleArray);   // pass a Double array

      System.out.println("\nArray characterArray contains:");
      printArray(charArray);   // pass a Character array
   }
}

Это даст следующий результат —