Java "Parameter" in der Methodensignatur?

112

Wenn Sie möchten, dass eine Methode in C # eine unbestimmte Anzahl von Parametern hat, können Sie den endgültigen Parameter in der Methodensignatur so festlegen params, dass der Methodenparameter wie ein Array aussieht, aber jeder, der die Methode verwendet, so viele Parameter dieses Typs übergeben kann wie der Anrufer will.

Ich bin mir ziemlich sicher, dass Java ein ähnliches Verhalten unterstützt, aber ich kann nicht herausfinden, wie es geht.

Omar Kooheji
quelle

Antworten:

194

In Java heißt es varargs , und die Syntax sieht aus wie ein regulärer Parameter, jedoch mit einem Auslassungszeichen ("...") nach dem Typ:

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

Der vararg-Parameter muss immer der letzte Parameter in der Methodensignatur sein und wird so aufgerufen, als hätten Sie ein Array dieses Typs erhalten (z. B. Object[]in diesem Fall).

David Grant
quelle
3
Danke, ich habe das bizzarrly selbst herausgefunden, als ich etwas anderes nachgeschlagen habe und hierher gekommen bin, um die Frage selbst zu beantworten.
Omar Kooheji
11

Dies wird den Trick in Java tun

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

Sie müssen drei Punkte hinzufügen ...und der varagrParameter muss der letzte in der Signatur der Methode sein.

Stefano Driussi
quelle
3

Wie es auf früheren Antworten geschrieben steht, ist es varargsund deklariert mit ellipsis( ... )

Darüber hinaus können Sie entweder die Werttypen und / oder Referenztypen oder beide gemischt übergeben (Google Autoboxing ). Zusätzlich können Sie den Methodenparameter als Array verwenden, wie in der folgenden printArgsAlternateMethode gezeigt .

Demo-Code

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();
    }

}

Ausgabe

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