2012-07-27 26 views
14

¿Qué indican los tres puntos (...) cuando se usa como parte de los parámetros durante la definición del método?¿Qué indican los tres puntos (...) cuando se usan como parte de los parámetros durante la definición del método?

Además, ¿hay algún término de programación para el símbolo de esos 3 puntos?

me di cuenta en un ejemplo de código:

public void method1 (Animal... animal) { 
// Code 
} 

Y este método fue llamado desde 2 lugares. Los argumentos que se pasan al llamar eran diferentes en ambos escenarios sin embargo:

  1. matriz de objetos se pasa como argumento a metodo1 (Animal ...)

  2. objeto de clase Animal pasa como argumento a metodo1 (Animal ...)

lo tanto, es algo así como, si no está seguro de si se le pasa un solo elemento de una matriz o toda la matriz como un argumento para el método, se utiliza 3 puntos como parte de los parámetros en la definición del método?

También, avíseme si hay algún término de programación para el símbolo de esos 3 puntos.

Respuesta

16

Se llama varargs.

Significa que puede pasar tantos tipos de ese tipo como desee.

Realmente lo traduce en method1(Animal[] a) y usted los referencia como a[1] como lo haría con cualquier otra matriz.

Si Tengo el siguiente

Cat whiskers = new Cat(); 
Dog rufus = new Dog(); 
Dolphin flipper = new Dolphin(); 

method1(whiskers, rufus, flipper); // okay! 
method1(rufus); // okay! 
method1(); // okay! 
method1(flipper,new Parakeet()); // okay! 
4

Eso significa que el método acepta una matriz de este tipo de objetos pero, esa matriz se crea automáticamente cuando se pasa varios objetos de ese tipo separados por comas.

Tenga en cuenta que solo puede haber un parámetro vararg de un tipo determinado en una firma de método, y no puede tener otro argumento del mismo tipo en la firma que sigue al vararg (obviamente, no habría manera de distinguir entre los dos).

1

Significa que se pueden pasar cero o más objetos String (o una matriz de ellos) como los parámetros para esa función.

Tal vez:

x("foo", "bar"); 
x("foo", "bar", "baz"); 
Cuestiones relacionadas