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.

¿Qué son los Varargs (Argumentos de longitud variable) en Java?

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:

  • Si la cantidad máxima de argumentos era pequeña y conocida, se podía crear versiones sobrecargadas del método, una para cada una de las formas en que se podría llamar al método. 
  • Si la cantidad máxima de argumentos potenciales era mayor o incognoscible, los argumentos se colocaban en una matriz y luego la matriz se pasaba al método.

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.

Sintaxis de Varargs en Java

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.

Uso de Varargs en Java

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:

  • Primero, como se explicó, dentro de vaTest(), v se opera como un array, ya que es una matriz. La sintaxis de tres puntos (…) básicamente le dice al compilador que se usará un número variable de argumentos, y que estos argumentos se almacenarán en la matriz mencionada por v.
  • Segundo, en main()vaTest() se llama con diferentes números de argumentos, incluyendo ningún argumento en absoluto. Los argumentos se introducen automáticamente en una matriz y se pasan a v. Si no hay argumentos, la longitud de la matriz es cero.
¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: