Varargs em Java
1. Introdução
Varargs foram introduzidos emJava 5 e fornecem uma abreviação para métodos que suportam um número arbitrário de parâmetros de um tipo.
Neste artigo, veremos como podemos usar esse recurso principal do Java.
2. Antes deVarargs
Antes do Java 5, sempre que queríamos passar um número arbitrário de argumentos, tivemos que passar todos os argumentos em uma matriz ou implementar métodos N (um para cada parâmetro adicional):
public String format() { ... }
public String format(String value) { ... }
public String format(String val1, String val2) { ... }
3. Uso deVarargs
Varargs nos ajuda a evitar a escrita de código clichê, introduzindo a nova sintaxe que pode lidar com um número arbitrário de parâmetros automaticamente - usando uma matriz nos bastidores.
Podemos defini-los usando uma declaração de tipo padrão, seguida por reticências:
public String formatWithVarArgs(String... values) {
// ...
}
E agora, podemos chamar nosso método com um número arbitrário de argumentos, como:
formatWithVarArgs();
formatWithVarArgs("a", "b", "c", "d");
Como mencionado anteriormente,varargs are arrays so we need to work with them just like we’d work with a normal array.
4. Regras
Varargs são fáceis de usar. Mas existem algumas regras que devemos ter em mente:
-
Cada método pode ter apenas um parâmetrovarargs
-
O argumentovarargs deve ser o último parâmetro
5. Uso seguro de Varargs
Usarvarargs pode levar ao chamadoHeap Pollution.
Simplificando, isso significa que Java tratavarargs como instânciasObject genéricas que podem levar aClassCastExceptions mais tarde.
Isso não significa quevarargs não seja seguro. É seguro trabalhar com um tipo de concreto comoString, mas usar genéricos pode não ser tão simples.
Como há um risco potencial de uma exceção fatal de tempo de execução, o compilador Java ou nosso IDE pode mostrar um aviso como este:
warning: [varargs] Possible heap pollution from parameterized vararg type T
Se garantirmos que o método em si não faz nenhuma transformação maligna ou conversão de tipo, podemos usar@SafeVarargs para suprimir o aviso.
6. Conclusão
Varargs pode fazer com que muitos clichês desapareçam no Java.
E, graças a seusautoboxing implícitos de e paraArray,, eles desempenham um papel na verificação futura de nosso código.
Como sempre, todos os exemplos de código deste artigo podem estar disponíveis em nossoGitHub repository.