2010-02-25 14 views
93

¿Es posible declarar un método que permita un número variable de parámetros?Número de variable de Java o argumentos para un método

¿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

+7

Desde su tarea, no queremos saber su pregunta, solo queremos saber que está aprendiendo. – HDave

Respuesta

205

Eso es correcto. Puede encontrar más información al respecto en the Oracle guide on varargs.

He aquí un ejemplo:

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

que puede ser llamado 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 paramteres? p.ej. (String ... strs, int ... ints). ¿Qué pasa con cualquier tipo de argumento en cualquier orden? – trusktr

+4

@trusktr: si quiere cualquier objeto, simplemente use 'Object ...'. – BalusC

+1

¿Eso también funciona con primitivos? – trusktr

11

sí, es posible:

public void myMethod(int...numbers) { ... } 
10
Variable number of arguments 

Es posible pasar una cantidad variable de argumentos a un método. Sin embargo, hay algunas restricciones:

  • El número variable de parámetros deben ser todos del mismo tipo
  • son tratados como una matriz dentro del método
  • Ellos debe ser el último parámetro del método

para comprender estas restricciones, tenga en cuenta el método, en el siguiente fragmento de código, utiliza para devolver el mayor número entero en una lista de números enteros:

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

fuente de Oracle Certified Associate Java SE 7 Guía de estudio programador 2012

2

Si es posible utilizar diferentes tipos de argumentos, a continuación, utilizar:

public void foo(Object... x) { 
    String first = x.length > 0 ? (String)x[0] : "Hello"; 
    int duration = x.length > 1 ? Integer.parseInt((String) x[1])  : 888; 
} 
foo("Hii",); 
foo("Hii", 146); 

de seguridad, utilice la siguiente manera:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

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

0

Sí Java permite vargs en el parámetro del método.

class  Varargs{public int add(int... numbers){ int result = 1; for(int number: numbers){result= result+numbers;  }  return result; }} 
+0

No utilice enlaces para proporcionar una respuesta. Los enlaces pueden morir, pero si incluye la respuesta real en su publicación, se podrá buscar para las generaciones futuras, en caso de que alguien tenga el mismo problema. – Moseleyi

Cuestiones relacionadas