Varargs: argumentos em quantidade variável
Alguns métodos podem precisar de um número variável de argumentos, dependendo da sua aplicação.
Um exemplo é um método que abre uma conexão com a Internet e pode receber parâmetros como nome de usuário, senha, nome de arquivo, protocolo, etc.
Se algumas informações não forem passadas, o método pode usar padrões para esses parâmetros.
Métodos com argumentos de tamanho variável permitem passar apenas os argumentos necessários.
Antes do JDK 5, esses métodos eram tratados com sobrecarga ou arrays, o que era uma abordagem limitada e desajeitada.
A partir do JDK 5, foi introduzido o recurso varargs, que facilita a criação de métodos com um número variável de argumentos.
Varargs é a abreviação de "variable-length arguments".
Métodos que utilizam varargs são chamados de métodos de aridade variável ou simplesmente métodos varargs.
A lista de parâmetros de um método varargs é de tamanho variável, permitindo receber um número variável de argumentos.
Aspectos básicos dos varargs
Uma lista de argumentos de tamanho variável é especificada por três pontos (...).
Para criar um método que recebe um número variável de argumentos, utilizam-se esses três pontos na declaração do método.
Um exemplo é o método vaTest(), que demonstra como implementar essa funcionalidade.
Observe que v é declarado como:
int ... v
A sintaxe com ... informa ao compilador que vaTest() pode ser chamado com zero ou mais argumentos.
O parâmetro v é implicitamente declarado como um array do tipo int[].
Dentro do método vaTest(), v é acessado usando a sintaxe comum de arrays.
Um programa completo pode demonstrar o uso de vaTest().
Dentro de vaTest(), o parâmetro v é tratado como um array porque é, de fato, um array.
A sintaxe ... indica ao compilador que será usado um número variável de argumentos, que serão armazenados no array v.
No método main(), vaTest() é chamado com diferentes números de argumentos, incluindo nenhuma.
Quando não há argumentos, o array v tem tamanho zero.
Métodos podem ter parâmetros comuns junto com parâmetros de tamanho variável, mas o varargs deve ser o último declarado.
Exemplo de declaração aceitável: int doIt(int a, int b, double c, int ... vals).
Nesse caso, os primeiros argumentos são passados para os parâmetros comuns, e os restantes para vals.
O método vaTest() pode ser reescrito para receber um argumento comum além do varargs.
O parâmetro varargs deve ser o último da lista de parâmetros do método.
Não é permitido declarar um parâmetro comum após um parâmetro varargs; isso gera um erro.
Apenas um parâmetro varargs pode ser declarado em um método.
Tentar declarar mais de um parâmetro varargs no mesmo método, como em int ... vals seguido de double ... morevals, é inválido e gera erro.