Java Generics - Methoden

Sie können eine einzelne generische Methodendeklaration schreiben, die mit Argumenten unterschiedlichen Typs aufgerufen werden kann. Basierend auf den Typen der Argumente, die an die generische Methode übergeben werden, behandelt der Compiler jeden Methodenaufruf entsprechend. Im Folgenden finden Sie die Regeln zum Definieren generischer Methoden:

  • Alle generischen Methodendeklarationen haben einen Typparameterabschnitt, der durch spitze Klammern (<und>) begrenzt ist und vor dem Rückgabetyp der Methode steht (<E> im nächsten Beispiel).

  • Jeder Typparameterabschnitt enthält einen oder mehrere durch Kommas getrennte Typparameter. Ein Typparameter, auch als Typvariable bezeichnet, ist ein Bezeichner, der einen generischen Typnamen angibt.

  • Die Typparameter können verwendet werden, um den Rückgabetyp zu deklarieren und als Platzhalter für die Typen der an die generische Methode übergebenen Argumente zu fungieren, die als tatsächliche Typargumente bezeichnet werden.

  • Der Körper einer generischen Methode wird wie der einer anderen Methode deklariert. Beachten Sie, dass Typparameter nur Referenztypen darstellen können, keine primitiven Typen (wie int, double und char).

Beispiel

Das folgende Beispiel zeigt, wie wir ein Array unterschiedlichen Typs mit einer einzigen generischen Methode drucken können.

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

Dies führt zu folgendem Ergebnis:

Ausgabe

Array integerArray contains:
1 2 3 4 5 

Array doubleArray contains:
1.1 2.2 3.3 4.4 

Array characterArray contains:
H E L L O