“Params” Java na assinatura do método?

112

Em C #, se você quiser que um método tenha um número indeterminado de parâmetros, você pode tornar o parâmetro final na assinatura do método um paramspara que o parâmetro do método pareça um array, mas permita que todos que usam o método passem tantos parâmetros desse tipo como o chamador deseja.

Tenho quase certeza de que o Java oferece suporte a um comportamento semelhante, mas não consigo descobrir como fazer isso.

Omar Kooheji
fonte

Respostas:

194

Em Java é chamado de varargs , e a sintaxe parece um parâmetro regular, mas com reticências ("...") após o tipo:

public void foo(Object... bar) {
    for (Object baz : bar) {
        System.out.println(baz.toString());
    }
}

O parâmetro vararg deve ser sempre o último parâmetro na assinatura do método, e é acessado como se você tivesse recebido um array desse tipo (por exemplo Object[], neste caso).

David Grant
fonte
3
Obrigado, eu descobri isso sozinho enquanto procurava outra coisa e vim aqui para responder à pergunta sozinho.
Omar Kooheji
11

Isso vai funcionar em Java

public void foo(String parameter, Object... arguments);

Você deve adicionar três pontos ...e o varagrparâmetro deve ser o último na assinatura do método.

Stefano Driussi
fonte
3

Como está escrito nas respostas anteriores, é varargse declarado com ellipsis( ... )

Além disso, você pode passar os tipos de valor e / ou tipos de referência ou ambos mistos (google Autoboxing ). Além disso, você pode usar o parâmetro do método como uma matriz, conforme mostrado com o printArgsAlternatemétodo abaixo.

Código Demo

public class VarargsDemo {

    public static void main(String[] args) {
        printArgs(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
        printArgsAlternate(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
    }

    private static void printArgs(Object... arguments) {
        System.out.print("Arguments: ");
        for(Object o : arguments)
            System.out.print(o + " ");

        System.out.println();
    }

    private static void printArgsAlternate(Object... arguments) {
        System.out.print("Arguments: ");

        for(int i = 0; i < arguments.length; i++)
            System.out.print(arguments[i] + " ");

        System.out.println();
    }

}

Resultado

Arguments: 3 true Hello! true 25.3 a X 
Arguments: 3 true Hello! true 25.3 a X 
Levent Divilioglu
fonte