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

    • Luc

      Pues mi Eclipse no me deja realizar una operacion como la que comenta Jose D…
      Al poner miFuncion(int i, double j, String… args, Integer… nums)
      me dice: “The variable argument type String of the method miFuncion must be the last parameter”
      Tampoco he conseguido encontrar ningún lugar que diga que se puede o no se puede. Solo hablan de que se puede combinar con otros parametros de otros tipos.

      Saludos

      Responder

      • pepe

        creo que solo se puede poner una vez el varargs y al final de lista de parametros.

        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 😛

    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

  14. Pedro Garcia

    Muy buena tu esplicacion,
    me voy a unir a este blog para poder comentar sobre la programacion java.

    Responder

  15. juan

    hola zootropo un favor o mas q un favor una ayuda, pues estoy queriendo aprender a programar en java con eclipse y no se donde empezar no se si podrias darme una manito recomendando algunas cosas basicas que debo hacer porfa

    Responder

  16. Lucas

    Reglas de los var-args:

    1) Tipado: Cuando declaras un parámetro var-arg, debes especificar el tipo de argumento/s (tipos primitivos o objetos)

    2) Sintaxis: Para declarar un argumeto de tipo var-arg debes acompañarlo de (…) un espacio y el nombre del array que contentra los parámetros recibidos.

    3) Otros parámetros: Es legal tener otros parámetros en un método que usa var-args.

    4) Limites: El var-arg debe ser el último parámetero declarado y el método sólo puede tener un parámetro de tipo var-arg.

    Responder

  17. Again, a good post, Much appreciated. I have scanned other entries you made and I look forward to more. Cheers.

    Responder

  18. Interesante el dato, gracias 😉

    Responder

  19. JohnPore

    ¡Danilo, pájaro!

    Responder

Deja un comentario