En los documentos de App Engine , ¿qué son los puntos suspensivos (JID... ) en la firma de este método?
public MessageBuilder withRecipientJids(JID... recipientJids)
¿Cuál es la función de esos tres puntos?
En los documentos de App Engine , ¿qué son los puntos suspensivos (JID... ) en la firma de este método?
public MessageBuilder withRecipientJids(JID... recipientJids)
¿Cuál es la función de esos tres puntos?
Respuestas:
Esos son los 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 utilizar puntos suspensivos 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"
En PrintWithEllipsisel interior , el tipo de setOfStringses una matriz de cadenas. Para que pueda guardar el compilador algo de trabajo y pasar una matriz:
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
Para varargs métodos , 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){}
entonces se produce un error en tiempo de compilación.
Fuente: La especificación del lenguaje de programación Java , donde el término técnico es variable arity parametermás que el 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 varargsdeben estar al final de la firma del método y solo puede haber una por método.
Esos son los varargsque se utilizan para crear un método que recibe cualquier número de argumentos.
Por ejemplo, el método PrintStream.printf lo usa, ya que no sabes cuántos argumentos usarías .
Solo pueden usarse como posición final de los argumentos.
varargsfue agregado en Java 1.5
Significa que el método acepta un número variable de argumentos ("varargs") de tipo JID. Dentro del método, recipientJidsse presenta.
Esto es útil para los casos en que tiene un método que puede manejar opcionalmente más de un argumento de forma natural, y le 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 tales como sprintfde C; ver String.format(), por ejemplo.
…, Unicode U + 2026. NetBeans 8 en Java 8 informa de "carácter ilegal". Así Java varargs requerir la triple punto (período),....