Nos documentos do Google App Engine , para que servem as reticências ( JID...
) nesta assinatura de método?
public MessageBuilder withRecipientJids(JID... recipientJids)
Qual é a função desses três pontos?
Nos documentos do Google App Engine , para que servem as reticências ( JID...
) nesta assinatura de método?
public MessageBuilder withRecipientJids(JID... recipientJids)
Qual é a função desses três pontos?
Respostas:
Essas são varargs Java. Eles permitem passar qualquer número de objetos de um tipo específico (nesse caso, eles são do tipo JID).
No seu exemplo, as seguintes chamadas de função seriam 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);
Veja mais aqui: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
A maneira de usar as reticências ou varargs dentro do método é como se fosse uma matriz:
public void PrintWithEllipsis(String...setOfStrings) {
for (String s : setOfStrings)
System.out.println(s);
}
Este método pode ser chamado da seguinte maneira:
obj.PrintWithEllipsis(); // prints nothing
obj.PrintWithEllipsis("first"); // prints "first"
obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond"
Dentro PrintWithEllipsis
, o tipo desetOfStrings
é uma matriz de String. Então você pode economizar algum trabalho no compilador e passar uma matriz:
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
Para varargs métodos , um parâmetro de sequência é tratado como sendo uma matriz do mesmo tipo. Portanto, se duas assinaturas diferirem apenas, uma declara uma sequência e a outra uma matriz, como neste exemplo:
void process(String[] s){}
void process(String...s){}
ocorre um erro em tempo de compilação.
Fonte: a especificação Java Programming Language , em que o termo técnico é variable arity parameter
mais do que o termo comum varargs
.
A notação de três pontos (...) é realmente emprestada da matemática e significa "... e assim por diante".
Quanto ao seu uso em Java, significa varargs
, o que significa que qualquer número de argumentos pode ser adicionado à chamada do método. As únicas limitações são que elas varargs
devem estar no final da assinatura do método e só pode haver uma por método.
Essas são varargs
eles são usados para criar um método que receber qualquer número de argumentos.
Por exemplo, o método PrintStream.printf o usa, pois você não sabe quantos argumentos usará.
Eles só podem ser usados como posição final dos argumentos.
varargs
foi adicionado no Java 1.5
Isso significa que o método aceita um número variável de argumentos ("varargs") do tipo JID
. Dentro do método, recipientJids
é apresentado.
Isso é útil para casos em que você tem um método que pode opcionalmente manipular mais de um argumento de maneira natural e permite escrever chamadas que podem passar um, dois ou três parâmetros para o mesmo método, sem a feiura de criar uma matriz em tempo real.
Ele também permite idiomas como sprintf
C; veja String.format()
, por exemplo.
…
, Unicode U + 2026. O NetBeans 8 no Java 8 relata "caracteres ilegais". Portanto, os varargs Java requerem a tripla parada completa (ponto final)...
,.