Java-Variablennummer oder Argumente für eine Methode


146

Ist es möglich, eine Methode zu deklarieren, die eine variable Anzahl von Parametern zulässt?

Welche Symbolik wird in der Definition verwendet, die angibt, dass die Methode eine variable Anzahl von Parametern zulassen soll?

Antwort: varargs


11
Seit den Hausaufgaben wollen wir Ihre Frage nicht wissen, wir wollen nur wissen, dass Sie lernen.
HDave

Antworten:


274

Das ist richtig. Weitere Informationen hierzu finden Sie im Oracle-Handbuch zu varargs .

Hier ist ein Beispiel:

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

was als bezeichnet werden kann

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.

1
Ist es möglich, verschiedene Arten von Parametern auszuführen? zB (String ... strs, int ... ints). Was ist mit irgendeiner Art von Argument in beliebiger Reihenfolge?
trusktr

5
@trusktr: Wenn Sie ein Objekt möchten, verwenden Sie einfach Object....
BalusC

2
@trusktr Nein, Grundelemente sind keine Objekte. Es gibt eine gute Erklärung für den Unterschied hier: programmerinterview.com/index.php/java-questions/…
Dick Lucas

5
@ Richard: Die Verwendung Object... argswegen mit Primitiven arbeiten Autoboxing .
Summe

1
@StevenVascellaro: Ich gehe davon aus, dass die Argumente wie ein Array behandelt werden, so dass Sie wahrscheinlich einfach tun könntenvarargs.length
LMD

15
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 von Parametern muss alle vom gleichen 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, mit der die größte Ganzzahl in einer Liste von Ganzzahlen zurückgegeben wird:

private static int largest(int... numbers) {
     int currentLargest = numbers[0];
     for (int number : numbers) {
        if (number > currentLargest) {
            currentLargest = number;
        }
     }
     return currentLargest;
}

Quelle Oracle Certified Associate Java SE 7-Programmierstudienhandbuch 2012


14

Ja es ist möglich:

public void myMethod(int... numbers) { /* your code */ }

10

Für verschiedene Arten von Argumenten gibt es 3 Punkte :

public void foo(Object... x) {
    String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
    int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

Dann nenne es

foo("Hii"); 
foo("Hii", 146); 

Verwenden Sie aus Sicherheitsgründen Folgendes:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

Der Hauptnachteil dieses Ansatzes besteht darin, dass bei statischen Parametern unterschiedlicher Typen die statische Typprüfung verloren geht. Bitte sehen Sie weitere Variationen .



0

Ja, Java erlaubt vargsMethodenparameter.

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.