webentwicklung-frage-antwort-db.com.de

Java "params" in Methodensignatur?

Wenn Sie in C # möchten, dass eine Methode eine unbestimmte Anzahl von Parametern enthält, können Sie den letzten Parameter in der Methodensignatur zu einem params machen, sodass der Methodenparameter wie ein Array aussieht, aber jeder übergibt, der die Methode verwendet so viele Parameter dieses Typs, wie der Aufrufer möchte.

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

106
Omar Kooheji

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 always der letzte Parameter in der Methodensignatur sein und wird aufgerufen, als ob Sie ein Array erhalten hätten dieser Art (zB Object[] in diesem Fall).

187
David Grant

Dies erledigt den Trick in Java

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

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

11
Stefano Driussi

Wie in vorherigen Antworten geschrieben, ist es varargs und wird mit Ellipsis deklariert (...)

Außerdem können Sie entweder die Werttypen und/oder Referenztypen oder beide gemischt übergeben (google Autoboxing). Zusätzlich können Sie den method-Parameter als Array verwenden, wie unten mit der printArgsAlternate -Methode 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 
3