Varargs en Java

Antiguamente si necesitábamos crear un método con un número de argumentos variable teníamos que crear un array u otro tipo de colección, añadir los argumentos a la colección y recorrerlos en el método. El mejor ejemplo de esto es el método main, el punto de entrada a las aplicaciones Java:

public class Ejemplo {
  public static void main(String[] args) {
    System.out.println("Los argumentos son:");
    for (String arg : args)
      System.out.println(arg);
  }
}

Desde Java 5 gracias a un mecanismo llamado varargs (argumentos variables) podemos pasar un número variable de argumentos a un método de forma transparente, de la misma forma en que lo haríamos en otros lenguajes como Python. Basta añadir “...” después del tipo.

public class Ejemplo {
  public static void main(String... args) {
    imprimir("Uno", "Dos", "Tres");
  }

  public static void imprimir(String... cadenas) {
    for (String cadena : cadenas)
      System.out.println(cadena);
  }
}

Fijaos especialmente en los argumentos de main en este ejemplo, es algo que suele resultar curioso a las personas que llevan años escribiendo el consabido public static void main(String[] args).

En todo caso no os emocionéis demasiado, ya que varargs en realidad no es más que puro azúcar sintáctico y se sigue utilizando un array de forma interna, aunque el proceso se oculta y se automatiza.



Comentarios
  1. Danilo

    Tengo años uasndo Java y no conocía esto. Excelente aporte… por cierto, ultimamente has escrito cosas muy buenas sobre Java, lo que ha despertado un interes mayor en tu blog del que ya tenía.

    Responder

  2. Me alegro Danilo :) Se agradece.

    Responder

  3. Zootropo, pido permiso para copiar este artículo en mi blog en el cual estoy escribiendo algunas cosillas y notas mentales de lo que voy aprendiendo de Java :)

    Responder

  4. [...] artículo completo visto en MundoGeek Comparte y [...]

    Responder

  5. @EduS ningún problema, por supuesto :)

    Responder

  6. Si, además estaría bien comentar que se pueden combinar con parámetros fijos siempre y cuando los parametros variables (Varargs) vayan al final del todo y también puede haber de varios tipos.

    Ejemplo: miFuncion(int i, double j, String… args, Integer… nums)

    Responder

  7. Ajá, gracias por la aportación, Jose. Debería haberlo comentado, si :)

    Responder

  8. De nada, por cierto… ¿cómo metes el código de esa forma?¿es algún plugin o algo?

    Responder

  9. @Jose D exacto, lo que enlaza Saiyine es el script que utilizo :P

    Responder

  10. GRACIAS!

    Responder

  11. chuche

    Muchas gracias por esta info, no la conosia a un que ya tiene rato que no programo espero poder practicar ese ejemplo

    Responder

  12. Luis Eduardo

    Muchas gracias!! quisiera hacerte una consulta

    public class Ejemplo {
    public static void main(String[] args) {
    System.out.println(“Los argumentos son:”);
    for (String arg : args)
    System.out.println(arg);
    }
    }

    al hacer el ciclo foreach estas imprimiendo arg, pero que imprimes ? exactamente ? lo he probado y sale nada.
    Me gustaria que me pudieses aclarar esto porfavor.
    Gracias nuevamente.

    Responder

    • Estás imprimiendo cada uno de los elementos de la matriz args, que es la matriz en la que se guardan los parámetros que le hayas pasado al programa al iniciarlo por línea de comandos.

      Responder

  13. [...] en la programación, aquí lo que pasa es que si teníamos un método con parámetros de tipo vararg, si metías tipos no reifiables (no sé la traducción de reifiable), daba un warning donde se [...]

    Responder

Deja un comentario