Java Generics - Metodi

È possibile scrivere una singola dichiarazione di metodo generico che può essere chiamata con argomenti di diversi tipi. In base ai tipi di argomenti passati al metodo generico, il compilatore gestisce ogni chiamata di metodo in modo appropriato. Di seguito sono riportate le regole per definire i metodi generici:

  • Tutte le dichiarazioni di metodi generici hanno una sezione di parametro di tipo delimitata da parentesi angolari (<e>) che precede il tipo restituito del metodo (<E> nell'esempio successivo).

  • Ogni sezione di parametro di tipo contiene uno o più parametri di tipo separati da virgole. Un parametro di tipo, noto anche come variabile di tipo, è un identificatore che specifica un nome di tipo generico.

  • I parametri di tipo possono essere utilizzati per dichiarare il tipo restituito e fungere da segnaposto per i tipi degli argomenti passati al metodo generico, noti come argomenti di tipo effettivo.

  • Il corpo di un metodo generico viene dichiarato come quello di qualsiasi altro metodo. Nota che i parametri di tipo possono rappresentare solo tipi di riferimento, non tipi primitivi (come int, double e char).

Esempio

L'esempio seguente illustra come è possibile stampare un array di tipo diverso utilizzando un unico metodo generico:

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

Questo produrrà il seguente risultato:

Produzione

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