Número variable de Java o argumentos para un método


148

¿Es posible declarar un método que permita un número variable de parámetros?

¿Cuál es el simbolismo utilizado en la definición que indica que el método debe permitir un número variable de parámetros?

Respuesta: varargs


11
Como es tarea, no queremos saber tu pregunta, solo queremos saber que estás aprendiendo.
HDave

Respuestas:


276

Eso es correcto. Puede encontrar más información al respecto en la guía de Oracle sobre varargs .

Aquí hay un ejemplo:

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

que se puede llamar como

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.

1
¿Es posible hacer varios tipos de parámetros? por ejemplo (String ... strs, int ... ints). ¿Qué pasa con cualquier tipo de argumento en cualquier orden?
trusktr

55
@trusktr: si quieres algún objeto, solo úsalo Object....
BalusC

2
@trusktr No, las primitivas no son objetos. Aquí hay una gran explicación de la diferencia: programmerinterview.com/index.php/java-questions/…
Dick Lucas

55
@ Richard: El uso Object... argsfuncionará con primitivas debido al autoboxing .
Sumit

1
@StevenVascellaro: Supongo que los argumentos se manejan como una matriz, por lo que probablemente podría simplemente hacerlovarargs.length
LMD

15
Variable number of arguments

Es posible pasar un número variable de argumentos a un método. Sin embargo, hay algunas restricciones:

  • El número variable de parámetros debe ser del mismo tipo.
  • Se tratan como una matriz dentro del método
  • Deben ser el último parámetro del método.

Para comprender estas restricciones, considere el método, en el siguiente fragmento de código, utilizado para devolver el entero más grande en una lista de enteros:

private static int largest(int... numbers) {
     int currentLargest = numbers[0];
     for (int number : numbers) {
        if (number > currentLargest) {
            currentLargest = number;
        }
     }
     return currentLargest;
}

fuente Oracle Certified Associate Java SE 7 Programmer Study Guide 2012


14

Si es posible:

public void myMethod(int... numbers) { /* your code */ }

10

Para diferentes tipos de argumentos, hay 3 puntos :

public void foo(Object... x) {
    String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
    int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

Entonces llámalo

foo("Hii"); 
foo("Hii", 146); 

por seguridad, use así:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

El principal inconveniente de este enfoque es que si los parámetros opcionales son de diferentes tipos, pierde la comprobación de tipo estático. Por favor, vea más variaciones .



0

Sí, Java permite el vargsparámetro del método.

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.