2013-07-24 17 views
12

Ecco il mio scenario:Java: invio di più parametri al metodo

Devo chiamare un metodo. Lasciate che i parametri siano: Parametro1, Parametro2, .., .., parametro N Ma i parametri da inviare al metodo potrebbero cambiare in ogni caso.

Caso 1: Solo Parameter1 viene inviato

Caso 2: una combinazione di parametri viene inviato

Caso 3: tutti i parametri vengono inviati

Qual è il modo migliore per raggiungere questo in Java?

risposta

23

La soluzione dipende da th e risposta alla domanda: tutti i parametri saranno dello stesso tipo e in tal caso ciascuno di essi sarà trattato allo stesso modo?

Se i parametri non sono dello stesso tipo o ancora più importante non stanno per essere trattati allo stesso allora si dovrebbe utilizzare il metodo overloading:

public class MyClass 
{ 
    public void doSomething(int i) 
    { 
    ... 
    } 

    public void doSomething(int i, String s) 
    { 
    ... 
    } 

    public void doSomething(int i, String s, boolean b) 
    { 
    ... 
    } 
} 

Se invece ogni parametro è lo stesso tipo e saranno trattate in allo stesso modo è possibile utilizzare i args variabile elemento in Java:

public MyClass 
{ 
    public void doSomething(int... integers) 
    { 
    for (int i : integers) 
    { 
     ... 
    } 
    } 
} 

Ovviamente quando si utilizza args variabili è possibile accedere a ogni argomento con il suo indice, ma vorrei consigliare contro questo, come nella maggior parte dei casi si allude a un problema in il tuo design. Allo stesso modo, se ti trovi a fare controlli di tipo mentre esegui l'iterazione sugli argomenti, il tuo progetto necessita di una revisione.

+0

Tutti i parametri non sono dello stesso tipo e non conosciamo il numero di parametri che verranno passati. –

+1

Avrei dovuto essere più chiaro - tutti i parametri possono essere gestiti come lo stesso tipo super, senza la necessità di un controllo di tipo? Il controllo del tipo non è la fine del mondo, ma nella maggior parte dei casi è un codice di odore imho. –

+0

Tutti i parametri non sono dello stesso tipo e non conosciamo il numero di parametri che verranno passati. Esempio: metodo (stringa a1, stringa a2, stringa b1, stringa b2, .., .. e alcuni parametri int comuni, stringa) dove a1 e a2 sono un set, b1 e b2 un altro set e così via. Ma non conosciamo il numero di set che devono passare. –

9

Supponiamo di avere un metodo vuoto che stampa molti oggetti;

public static void print(Object... values){ 
    for(Object c : values){ 
     System.out.println(c); 
    } 
} 

Sopra esempio ho usato vararge come un argomento che accetta valori da 0 a N.

Dai commenti: Che cosa succede se due stringhe e 5 numeri interi ??

Risposta:

print("string1","string2",1,2,3,4,5); 
+0

Cosa succede se 2 stringhe e 5 numeri interi ?? –

+0

Invece di chiamarli 'String's chiamali semplicemente' Object's. – jrad

+0

@sureshatta: Jack già risposto. Rendi il vararge come un tipo di oggetto – Azad

Problemi correlati