Ist es möglich, eine Methode zu deklarieren, die eine variable Anzahl von Parametern erlaubt?
Was ist die in der Definition verwendete Symbolik, die darauf hindeutet, dass die Methode eine variable Anzahl von Parametern zulassen soll?
Antwort: varargs
Das ist richtig. Mehr dazu finden Sie in dem Oracle-Handbuch zu varargs .
Hier ist ein Beispiel:
void foo(String... args) {
for (String arg : args) {
System.out.println(arg);
}
}
das kann als aufgerufen werden
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.
Variable number of arguments
Es ist möglich, eine variable Anzahl von Argumenten an eine Methode zu übergeben. Es gibt jedoch einige Einschränkungen:
Um diese Einschränkungen zu verstehen, betrachten Sie die Methode im folgenden Codeausschnitt, die zum Zurückgeben der größten Ganzzahl in einer Liste von Ganzzahlen verwendet wird:
private static int largest(int... numbers) {
int currentLargest = numbers[0];
for (int number : numbers) {
if (number > currentLargest) {
currentLargest = number;
}
}
return currentLargest;
}
quellcode: Oracle Certified Associate Java SE 7 Programmiererhandbuch 2012
Ja es ist möglich:
public void myMethod(int...numbers) { ... }
Für verschiedene Arten von Argumenten gibt es 3-Punkte :
public void foo(Object... x) {
String first = x.length > 0 ? (String)x[0] : "Hello";
int duration = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
}
Dann ruf es an
foo("Hii");
foo("Hii", 146);
verwenden Sie aus Sicherheitsgründen wie folgt:if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }
Der Hauptnachteil dieses Ansatzes besteht darin, dass Sie die statische Typprüfung verlieren, wenn optionale Parameter unterschiedlichen Typs sind. Bitte beachten Sie weitere Variationen .
Ja, seit Java 5: http://Java.Sun.com/j2se/1.5.0/docs/guide/language/varargs.html
Ja, Java erlaubt vargs
im Methodenparameter.
public class Varargs
{
public int add(int... numbers)
{
int result = 1;
for(int number: numbers)
{
result= result+number;
} return result;
}
}