Algunas veces querrá crear un método que tome una cantidad variable de argumentos, según su uso preciso. Por ejemplo, un método que abre una conexión a Internet puede tomar un nombre de usuario, contraseña, nombre de archivo, protocolo, etc., pero proporcionará los valores predeterminados si no se proporciona parte de esta información.
En esta situación entran en juego los Varargs. Es decir, sería conveniente pasar solo los argumentos a los que no se aplicaron los valores predeterminados. Crear dicho método implica que debe haber alguna forma de crear una lista de argumentos que sea de longitud variable, en lugar de fija.
Por muchos años, los métodos que requerían una lista de argumentos de longitud variable sólo podían trabajarse de dos maneras:
A partir de la versión JDK 5 (Java 5), se incluyó Varargs, que es la abreviatura de argumentos de longitud variable (Variable-Length Arguments), característica que simplificó la creación de métodos que requieren una cantidad variable de argumentos, lo que representaba un problema para los programadores en las versiones anteriores de Java.
La lista de parámetros para un método varargs no tiene un tamaño fijo predeterminado, sino que tiene una longitud variable. Por lo tanto, un método varargs puede tomar una cantidad variable de argumentos.
Un argumento de longitud variable se especifica empleando tres puntos (…). En el siguiente ejemplo, se puede ver un programa donde se declara un método llamado vaTest() que toma una cantidad variable de argumentos:
//vaTest() usa un vararg
static void vaTest(int ... v){
System.out.println("Número de argumentos: "+v.length);
System.out.println("Contiene: ");
for (int i=0; i<v.length;i++)
System.out.println(" arg "+i+": "+v);
System.out.println();
}
Como puede observarse, v se declara como se muestra a continuación:
int ... v
Por medio de esta sintaxis se le comunica al compilador que se puede llamar a vaTest() con cero o más argumentos. Además, hace que v se declare implícitamente como una matriz de tipo int[]. Por lo tanto, dentro de vaTest(), se accede a v usando la sintaxis de matriz normal.
Para ver cómo funciona Varargs en Java, hay que ver el siguiente programa completo en el cual se emplea vaTest.
// Demostración Argumentos Variables en Java
class VarArgs{
//vaTest() usa un vararg
static void vaTest(int ... v){
System.out.println("Número de args: "+v.length);
System.out.println("Contiene: ");
for (int i=0; i<v.length;i++)
System.out.println(" arg "+i+": "+v);
System.out.println();
}
public static void main(String[] args) {
//Observe cómo vaTest() puede llamarse con un
//número variable de argumentos
vaTest(10); //1 arg
vaTest(1,2,3); //3arg
vaTest(); //sin arg
}
}
Salida:
Número de args: 1
Contiene:
arg 0: 10
Número de args: 3
Contiene:
arg 0: 1
arg 1: 2
arg 2: 3
Número de args: 0
Contiene:
Hay dos puntos importantes a destacar sobre este programa: