Quando temos um método que não sabemos ao certo quantos parâmetros serão passados, podemos passar um vetor ou lista de atributos primitivos ou objetos, mas em Java também podemos definir na assinatura do método, que ele recebe um parâmetro do tipo varargs.
O método pode receber quantos parâmetros forem necessários, porém só pode ter apenas um varargs na assinatura do método, sua sintaxe é assim:
Exemplo:
Neste exemplo, temos o seguinte método somarValores que recebe um varargs de inteiros, quando chamamos este método podemos passar quantos atributos do tipo inteiro for necessário, e se quiser também não precisa passar nenhum atributo para ele.
O varargs é um facilitador, ao invés de criar um array ou lista e colocar os valores dentro dele para depois chamar o método, o mesmo pode ser chamado diretamente passando os n valores e os parâmetros enviados são automaticamente adicionados em um array do mesmo tipo do varargs.
Também podemos usar o vargars em um método que recebe outros parâmetros, mas quando tem mais parâmetros o varargs precisa ser o ultimo parâmetro recebido pelo método, por exemplo:
Neste exemplo, o método somarValores recebe dois parâmetros, um inteiro e um varargs do tipo inteiro, então quando chamamos este método passamos o atributo multiplicador recebe o valor 2 e o atributo valores recebe os valores 10, 5, 15 e 20.
Lembrando que o varargs precisa ser o ultimo parâmetro do método e não pode ter mais que um varargs, caso contrario ocorrerá erro de compilação, por exemplo:
Portanto, estes dois métodos ficam com erro de compilação.
O método que tem na assinatura um parâmetro do tipo varargs só é chamado quando nenhuma outra assinatura de método corresponder com a invocação, por exemplo:
Neste exemplo, na primeira chamada do método somarValores passando apenas um atributo inteiro, é chamado o método somarValores(int numero). Na segunda chamada são passados vários parâmetros do tipo inteiro, neste caso o método chamado será o somarValores(int… numeros).