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 PrintWithEllipsis
el interior , el tipo de setOfStrings
es 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 parameter
má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 varargs
deben estar al final de la firma del método y solo puede haber una por método.
Esos son los varargs
que 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.
varargs
fue 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, recipientJids
se 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 sprintf
de 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),...
.