Samstag, 27. Juli 2019

Variable Methoden-Parameter

In Java 5 wurden die variablen Methoden-Parameter eingeführt, d.h. man kann einer Methode eine variable Anzahl an Parametern übergeben. Das klingt seltsam, also sehen wir uns die Sache mal an einem Beispiel an. Sie kennen das folgende:


public void myMethod(int intParameter1, int intParameter2, String stringParameter) { 
    // Mach was schlaue mit den Parametern
}


Hier haben wir eine feste Parameteranzahl: Wir übergeben der Methode zwei int-Parameter und einen String-Parameter. Und das ohne jede Ausnahme. Diese drei Parameter müssen wir übergeben. Wir können der Methode aber keinen dritten int-Parameter geben. Wir müssen uns mit diesen beiden zufrieden geben. Sehen Sie sich mal das nächste Beispiel an.

public void myMethod(int [] intParameters) {
for (int myInt: intParameters) {
System.out.println(myInt);
}
}


Jetzt arbeite ich mit einem Array. Darin kann ich mehrere Parameter unterbringen und dieses Array übergebe ich an die Methode. Ich kann nun ein Array mit einem Parameterwert übergeben, aber ich kann auch eines mit zehn Parameterwerten übergeben. Das geht also schon mehr in die Richtung von variablen Parametern. Das nächste Beispiel zeigt die Neuerung in Java 5.

public void myMethod(int ... intParameters) {
for (int myInt: intParameters) {
System.out.println(myInt);
}
}


Die einzige Änderung zu dem Beispiel mit dem Array sind die drei Punkte zwischen Datentyp und Parametername. Damit markieren wir Varargs, also variable Parameter. Wir können beliebig viele int-Parameter übergeben. Intern werden diese Varargs wie ein Array behandelt, ohne dass wir uns beim Aufruf mit einem Array herumplagen müssen. Und damit wären wir bei einer wichtigen Frage: Wie rufe ich das Ding eigentlich auf?

public void start() {
myMethod(4);
myMethod(4,5);
myMethod(1,2,3,4,5,6,7,8,9,0);
}


Oben sehen Sie drei mögliche Aufrufe. Wir können die Methode also tatsächlich mit beliebig vielen int-Parametern aufrufen.

Es gibt allerdings eine wichtige Einschränkung: Nach einem Vararg dürfen keine weiteren Parameter mehr folgen. Etwas wie im folgenden Listing ist also nicht erlaubt und produziert einen Compiler-Fehler:

public void myMethod(int ... intParameters, String test) {
for (int myInt: intParameters) {
System.out.println(myInt);
}
}


Damit es funktioniert, müssen die nicht variablen Parameter vor dem Vararg stehen - also wie im nächsten Listing zu sehen:

public void myMethod(String test, int ... intParameters) {
for (int myInt: intParameters) {
System.out.println(myInt);
}
}

Keine Kommentare:

Kommentar veröffentlichen