java - ¿Cuál es la elipsis(...) para en este método de firma?
ellipsis (6)
Esas son http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html que se usan para crear un método que recibe cualquier cantidad de argumentos.
Por ejemplo, el método PrintStream.printf usa, ya que no sabe cuántos argumentos usaría.
Solo pueden usarse como posición final de los argumentos.
varargs
fue agregado en http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
En los documentos de App Engine , ¿cuál es la elipsis ( JID...
) para esta firma de método?
public MessageBuilder withRecipientJids(JID... recipientJids)
¿Cuál es la función de esos tres puntos?
Esas son varargs de Java. Le permiten pasar cualquier cantidad de objetos de un tipo específico (en este caso son de tipo JID).
En su ejemplo, las siguientes llamadas a funciones serían válidas:
MessageBuilder msgBuilder; //There should probably be a call to a constructor here ;)
MessageBuilder msgBuilder2;
msgBuilder.withRecipientJids(jid1, jid2);
msgBuilder2.withRecipientJids(jid1, jid2, jid78_a, someOtherJid);
Ver más aquí: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
La forma de usar las elipsis o varargs dentro del método es como si fuera una matriz:
public void PrintWithEllipsis(String...setOfStrings) {
for (String s : setOfStrings)
System.out.println(s);
}
Este método se puede llamar de la siguiente manera:
obj.PrintWithEllipsis(); // prints nothing
obj.PrintWithEllipsis("first"); // prints "first"
obj.PrintWithEllipsis("first", "second"); // prints "first/nsecond"
Dentro de PrintWithEllipsis
, el tipo de setOfStrings
es una matriz de String. Para que pueda guardar el compilador un poco de trabajo y pasar una matriz:
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
Para los métodos varargs , un parámetro de secuencia se trata como una matriz del mismo tipo. Entonces, si dos firmas difieren solo en que una declara una secuencia y la otra una matriz, como en este ejemplo:
void process(String[] s){}
void process(String...s){}
a continuación, se produce un error en tiempo de compilación.
Fuente: Especificación del lenguaje de programación Java , donde el término técnico es un variable arity parameter
varargs
variable arity parameter
lugar del término común varargs
.
La notación de tres puntos (...) se toma prestada de las matemáticas, y significa "... y así sucesivamente".
En cuanto a su uso en Java, significa varargs
, lo que significa que se puede agregar cualquier número de argumentos a la llamada al método. Las únicas limitaciones son que los varargs
deben estar al final de la firma del método y solo puede haber uno por método.
Puede definir un parámetro que pueda aceptar argumentos variables (varargs) en sus métodos. A continuación se muestra un ejemplo de clase Employee, que define un método daysOffWork que acepta argumentos variables:
class Employee {
public int daysOffWork(int... days) {
int daysOff = 0;
for (int i = 0; i < days.length; i++) {
daysOff += days[i];
}
return daysOff;
}
}
Los puntos suspensivos (...) que siguen al tipo de datos indican que los días del parámetro del método pueden pasar una matriz o múltiples valores separados por comas.
Significa que el método acepta una http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html ("varargs") de tipo JID
. Dentro del método, se presenta recipientJids
.
Esto es útil para casos donde tienes un método que puede manejar opcionalmente más de un argumento de forma natural, y te permite escribir llamadas que pueden pasar uno, dos o tres parámetros al mismo método, sin tener la fealdad de crear una matriz sobre la marcha.
También permite modismos como sprintf
de C; vea String.format()
, por ejemplo.