Varargs Java: parametri a lunghezza variabile

DOMANDA:

Ho bisogno di creare un metodo con firme multiple (overloading) che permetta di inserire da 0 a n parametri (come nell'esempio). C'è un modo per evitare di riscrivere sempre lo stesso metodo n volte?


package varargs;

   public class ParametriVariabili {

      public void stampaParametri() {
         System.out.println();
      }

      public void stampaParametri(String parametro) {
          System.out.println(parametro);
      }

      public void stampaParametri(String parametro1, String parametro2) {
         System.out.println(parametro1 + " " + parametro2);
      }

      public void stampaParametri(String parametro1, String parametro2, String parametro3) {
         System.out.println(parametro1 + " " + parametro2 + " " + parametro3);
      }
}

RISPOSTA:

Se state usando una versione di Java inferiore alla 1.5, l'unica soluzione è creare un metodo che prende in input un array (o qualsiasi altra collezione di dati) come nell'esempio qui di seguito:

public void stampaParametri(String[] parametri){

   for(String s : parametri)
      System.out.print(s + " ");
 
   System.out.println();
}

Lo svantaggio di questa soluzione è che in realtà non stiamo passando n parametri, ma uno solo. Quindi, per richiamare questo metodo, nel nostro main dovremo preparare un array da passargli.


Buone notizie invece per chi usa la versione di Java dalla 1.5 in poi. Sono infatti stati introdotti quelli che si chiamano VARARGS e sono perfetti per soddisfare l'esigenza della domanda di oggi.

Vediamo come verrebbe riscritta la classe ParametriVariabili con i Varargs:

package varargs;

public class ParametriVariabili {

   public void stampaParametri(String ... parametri) {
      for(String s : parametri)
         System.out.print(s + " ");
 
      System.out.println();
   }
}

Come si può vedere, i tre puntini dopo il tipo di variabile indicano che il metodo accetta da 0 a n parametri (il numero massimo di parametri dipende dai limiti della Java Virtual Machine installata).


E ora la classe di Test per verificarne il corretto funzionamento:

package varargs;

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

      ParametriVariabili pv = new ParametriVariabili();

      pv.stampaParametri();
      pv.stampaParametri("Primo");
      pv.stampaParametri("Primo", "Secondo");
      pv.stampaParametri("Pippo", "Pluto", "Paperino", "Paperinik");
   }
}


L'output, come previsto, sarà il seguente:


Primo
Primo Secondo
Pippo Pluto Paperino Paperinik

(da notare la prima riga vuota)


Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java