Java Varargs (Variable Argumente) mit Beispielen

In diesem Artikel lernen Sie anhand von Beispielen Varargs in Java kennen. Sie werden auch lernen, wann Sie Varargs verwenden und wann Sie sie nicht verwenden.

Was ist varargs in Java?

Angenommen, Sie erstellen eine Java-Methode. Sie sind sich jedoch nicht sicher, wie viele Argumente Ihre Methode akzeptieren wird. Um dieses Problem zu beheben, wurden in Java 1.5 Varargs eingeführt.

Varargs ist ein Kurzname für variable Argumente. In Java kann ein Argument einer Methode eine beliebige Anzahl von Werten akzeptieren. Dieses Argument, das eine variable Anzahl von Werten akzeptieren kann, wird als varargs bezeichnet.

Die Syntax zum Implementieren von varargs lautet wie folgt:

 accessModifier methodName (Datentyp… arg) (// Methodenkörper)

Um vararg zu definieren, wird (drei Punkte) im formalen Parameter einer Methode verwendet.

Eine Methode, die eine variable Anzahl von Argumenten akzeptiert, wird als Variable-Arity-Methode oder einfach als Varargs-Methode bezeichnet.

Schauen wir uns zunächst das Beispiel an, ohne varargs zu verwenden:

 class NoVararg ( public int sumNumber(int a, int b)( return a+b; ) public int sumNumber(int a, int b, int c)( return a+b+c; ) public static void main( String() args ) ( NoVararg obj = new NoVararg(); System.out.println(obj.sumNumber(1, 2)); System.out.println(obj.sumNumber(1, 2, 3)); ) )

Wenn Sie dieses Programm ausführen, lautet die Ausgabe wie folgt:

 3 6

Wie Sie deutlich sehen können, mussten Sie die sumNumber()Methode überladen , damit sie für drei Argumente funktioniert.

Was ist, wenn der Benutzer 5 Zahlen oder 10 oder 100 hinzufügen möchte?

Dies kann mit Varargs ordentlich gehandhabt werden. Sehen wir uns ein Codebeispiel an:

Beispiel: Arbeiten mit Varargs

 class VarargExample ( public int sumNumber(int… args)( System.out.println("argument length: " + args.length); int sum = 0; for(int x: args)( sum += x; ) return sum; ) public static void main( String() args ) ( VarargExample ex = new VarargExample(); int sum2 = ex.sumNumber(2, 4); System.out.println("sum2 = " + sum2); int sum3 = ex.sumNumber(1, 3, 5); System.out.println("sum3 = " + sum3); int sum4 = ex.sumNumber(1, 3, 5, 7); System.out.println("sum4 = " + sum4); ) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Argumentlänge: 2 sum2 = 6 Argumentlänge: 3 sum3 = 9 Argumentlänge: 4 sum4 = 16

Hier gibt die sumNumber()Methode die Summe der übergebenen intParameter zurück (unabhängig von der Anzahl der übergebenen Argumente).

Wie Sie sehen können, können Varargs in einigen Situationen sehr nützlich sein. Wenn Sie jedoch sicher sind, wie viele Argumente an eine Methode übergeben werden, verwenden Sie stattdessen die Methodenüberladung. Wenn Sie beispielsweise sicher sind, dass diese sumNumber()Methode nur zur Berechnung der Summe von 2 oder 3 Argumenten verwendet wird, verwenden Sie die Überladung wie im ersten Beispiel.

Nehmen wir ein anderes Beispiel. Die in der Java-Bibliothek definierte format () -Methode akzeptiert varargs. In JDK ist die format()Methode wie folgt definiert:

 öffentliches statisches String-Format (Gebietsschema l, String-Format, Objekt… Argumente) (// body)

Beispiel: format () Methode

 class Company ( public static void main(String() args) ( String siteName = "programiz.com"; int empCount = 6; String type = "tutorial website"; System.out.println( String.format( "Site Name : %s, Emp Count: %d Type: %s", siteName, empCount, type ) ); ) )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Site-Name: programiz.com, Emp Anzahl: 6 Typ: Tutorial-Website 

Wie funktioniert Varargs hinter den Kulissen?

Betrachten wir den folgenden Pseudocode:

 public int sumNumber (int… nums) (// Methodenkörper)

Die Syntax teilt dem Java-Compiler mit, dass die Methode mit null oder mehr Argumenten aufgerufen werden kann. Infolgedessen wird die Variable nums implizit als Array vom Typ deklariert int( ). Innerhalb der Methode wird daher auf die Variable nums mithilfe der Array-Syntax zugegriffen.

Wenn keine Argumente vorhanden sind, beträgt die Länge der Zahlen 0.

Überladen von Varargs-Methoden

Ähnlich wie bei typischen Methoden können Sie vararg-Methoden überladen.

Empfohlene Lektüre: Überladen der Java-Methode

Beispiel: Überladen der Varargs-Methode

 class VarargOverload ( private void test(int… args)( int sum = 0; for (int i: args) ( sum += i; ) System.out.println("sum = " + sum); ) private void test(boolean p, String… args)( boolean negate = !p; System.out.println("negate = " + negate); System.out.println("args.length = "+ args.length); ) public static void main( String() args ) ( VarargOverload obj = new VarargOverload(); obj.test(1, 2, 3); obj.test(true, "hello", "world"); ) ) 

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 sum = 6 negate = false args.length = 2

Im obigen Programm wird die test()Methode durch Ändern der Anzahl der akzeptierten Argumente überladen.

Dinge, die Sie bei der Verwendung von Varargs beachten sollten

Hier sind einige Dinge, die Sie bei der Arbeit mit Java-Vargars beachten sollten:

1. Behalten Sie beim Definieren der Methodensignatur immer zuletzt varargs bei.

Das variable Argument muss das letzte an die Methode übergebene Argument sein. Betrachten wir, Sie haben die folgende doSomething()Methode aufgerufen :

 etwas tun (1, 2, 3, 4);

Und Ihre doSomething()Methode ist definiert als:

 // falsche Methodendeklaration public void doSomething (int… nums, int p) (// Methodenkörper)

In diesem Fall kann der Compiler die Anzahl der an nums übergebenen Argumente nicht ermitteln.

Wenn Sie Ihre Methode jedoch wie folgt definieren:

 public void doSomething (int p, int… nums) (// Methodenkörper)

Der Java-Compiler weist p das erste Argument zu, und die verbleibenden intArgumente werden nums zugewiesen.

2. Eine Methode kann nur einen varargs-Parameter haben.

Diese Methodendeklaration ist beispielsweise falsch:

 int doSomething (int p, float… floatNums, double… doubleNums) (// code)

Mehrdeutigkeit bei Überladung der Varargs-Methode

Betrachten wir Ihre überladene test()Methode wie folgt:

 Klasse Demo (statischer Leertest (int… vargs) (// Methodenkörper) statischer Leertest (int n, int… vargs) (// Methodenkörper))

Im obigen Programm wird der Compiler verwirrt, wenn Sie versuchen, die test()Methode aufzurufen , obwohl die test()Methoden überladen sind und eine andere Anzahl von Argumenten akzeptieren.

Der Compiler weiß nicht, welche Methode er aufrufen soll. Der Compiler könnte denken, Sie versuchen, test(int… vargs)mit einem varargs-Argument aufzurufen. Der Compiler könnte auch denken, dass Sie versuchen, test(int n, int… vargs)mit einem Argument aufzurufen , das an den ersten Parameter mit einem leeren zweiten Parameter übergeben wird.

Da es zwei Möglichkeiten gibt, führt dies zu Mehrdeutigkeiten. Aus diesem Grund müssen Sie manchmal zwei verschiedene Methodennamen verwenden, anstatt die varargs-Methode zu überladen.

Interessante Beiträge...