Número ou argumentos da variável Java para um método

147

É possível declarar um método que permitirá um número variável de parâmetros?

Qual é o simbolismo usado na definição que indica que o método deve permitir um número variável de parâmetros?

Resposta: varargs

user69514
fonte
11
Desde a lição de casa, não queremos saber sua pergunta, apenas queremos saber que você está aprendendo.
HDave

Respostas:

275

Está correto. Você pode encontrar mais informações no guia Oracle sobre varargs .

Aqui está um exemplo:

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

que pode ser chamado como

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.
BalusC
fonte
1
É possível fazer vários tipos de parâmetros? por exemplo, (String ... strs, int ... ints). Que tal qualquer tipo de argumento em qualquer ordem?
trusktr
5
@trusktr: se você quiser qualquer objeto, basta usar Object....
precisa
2
@trusktr Não, as primitivas não são objetos. Há uma grande explicação sobre a diferença aqui: programmerinterview.com/index.php/java-questions/...
Dick Lucas
5
@ Richard: O uso Object... argsfuncionará com primitivos por causa do autobox .
Sumit
1
@StevenVascellaro: Presumo que os argumentos são tratados como um array, para que você provavelmente poderia simplesmente fazervarargs.length
LMD
15
Variable number of arguments

É possível passar um número variável de argumentos para um método. No entanto, existem algumas restrições:

  • O número variável de parâmetros deve ser do mesmo tipo
  • Eles são tratados como uma matriz dentro do método
  • Eles devem ser o último parâmetro do método

Para entender essas restrições, considere o método, no seguinte trecho de código, usado para retornar o maior número inteiro em uma lista de números inteiros:

private static int largest(int... numbers) {
     int currentLargest = numbers[0];
     for (int number : numbers) {
        if (number > currentLargest) {
            currentLargest = number;
        }
     }
     return currentLargest;
}

Guia do Estudo do Programador Java SE 7 da Oracle Certified Associate

Abey Ella
fonte
14

Sim é possivel:

public void myMethod(int... numbers) { /* your code */ }
Dolph
fonte
10

Para diferentes tipos de argumentos, há três pontos :

public void foo(Object... x) {
    String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
    int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

Então chame

foo("Hii"); 
foo("Hii", 146); 

por segurança, use assim:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

A principal desvantagem dessa abordagem é que, se os parâmetros opcionais forem de tipos diferentes, você perderá a verificação de tipo estático. Por favor, veja mais variações .

T.Todua
fonte
0

Sim Java permite vargsno parâmetro do método

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
Code_Eat_Sleep
fonte