webentwicklung-frage-antwort-db.com.de

Java-Variablennummer oder -argumente für eine Methode

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

115
user69514

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.
231
BalusC
Variable number of arguments

Es ist möglich, eine variable Anzahl von Argumenten an eine Methode zu übergeben. Es gibt jedoch einige Einschränkungen:

  • Die variable Anzahl der Parameter muss vom selben Typ sein
  • Sie werden innerhalb der Methode als Array behandelt
  • Sie müssen der letzte Parameter der Methode sein

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

13
Abey Ella

Ja es ist möglich:

public void myMethod(int...numbers) { ... }
13
Dolph

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 .

7
T.Todua
5
Roland Bouman

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; 
   }
}
0
crazy_coder