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.



23 pensamientos en “Varargs en Java”

  1. 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.

  2. 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 🙂

  3. Pingback: Varargs en Java | Eduardo N. Fortes

  4. 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)

    1. 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

  5. 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.

    1. 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.

  6. Pingback: iQuarK | cambios aceptados en jdk7 (y explicados)

  7. 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

  8. 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.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.