Java Varargs (variable argumenter) med eksempler

I denne artikel lærer du om varargs i Java ved hjælp af eksempler. Du lærer også, hvornår du skal bruge varargs, og hvornår du ikke skal bruge dem.

Hvad er varargs i Java?

Lad os antage, at du opretter en Java-metode. Du er dog ikke sikker på, hvor mange argumenter din metode vil acceptere. For at løse dette problem introducerede Java 1.5 varargs.

Varargs er et kort navn for variable argumenter. I Java kan et argument af en metode acceptere vilkårligt antal værdier. Dette argument, der kan acceptere variabelt antal værdier, kaldes varargs.

Syntaksen til implementering af varargs er som følger:

 accessModifier methodName (datatype … arg) (// method body)

For at definere vararg bruges (tre prikker) i den formelle parameter for en metode.

En metode, der tager variabelt antal argumenter kaldes en variabel aritetsmetode eller simpelthen en varargs-metode.

Lad os først se på eksemplet uden at bruge varargs:

 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)); ) )

Når du kører dette program, vil output være:

 3 6

Som du tydeligt kan se, var du nødt til at overbelaste sumNumber()metoden for at få den til at fungere for 3 argumenter.

Hvad hvis brugeren vil tilføje 5 tal eller 10 eller 100?

Dette kan håndteres på en pæn måde ved brug af varargs. Lad os se et kodeeksempel:

Eksempel: Arbejde af 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); ) )

Når du kører programmet, vil output være:

 argumentlængde: 2 sum2 = 6 argumentlængde: 3 sum3 = 9 argumentlængde: 4 sum4 = 16

Her sumNumber()returnerer metoden summen af intparametre, der er sendt til den (betyder ikke noget antallet af argumenter, der er sendt).

Som du kan se, kan varargs være virkelig nyttige i nogle situationer. Men hvis du er sikker på antallet af argumenter, der sendes til en metode, skal du bruge metode til overbelastning i stedet. Hvis du f.eks. Er sikker på, at sumNumber()metoden kun bruges til at beregne summen af ​​enten 2 eller 3 argumenter, skal du bruge overbelastning som i det første eksempel.

Lad os tage et andet eksempel. Format () -metoden defineret i Java-biblioteket accepterer vargs. I JDK format()defineres metoden som følger:

 offentligt statisk strengformat (landestandard l, strengformat, objekt … args) (// body)

Eksempel: format () Metode

 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 ) ); ) )

Når du kører programmet, vil output være:

 Webstedsnavn: programiz.com, Emp Count: 6 Type: tutorial website 

Hvordan fungerer varargs bag scenen?

Lad os overveje følgende pseudokode:

 public int sumNumber (int… nums) (// metodekrop)

Den syntaks fortæller Java compiler, at metoden kan kaldes med nul eller flere argumenter. Som et resultat erklæres nums-variablen implicit som en matrix af typen int( ). Således er der inden for metoden adgang til nums-variablen ved hjælp af array-syntaksen.

I tilfælde af ingen argumenter er længden af ​​nums 0.

Overbelastning af Varargs-metoder

I lighed med typiske metoder kan du overbelaste vararg-metoder.

Anbefalet læsning: Java-metode Overbelastning

Eksempel: Overbelastning af Varargs-metoden

 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"); ) ) 

Når du kører programmet, vil output være:

 sum = 6 negate = falske args.længde = 2

I ovenstående program er test()metoden overbelastet ved at ændre antallet af argumenter, den accepterer.

Ting at huske, når du bruger Varargs

Her er et par ting, du skal huske, når du arbejder med Java-vargars:

1. Mens du definerer metodesignatur, skal du altid holde varargs til sidst.

Variabelargumentet skal være det sidste argument, der sendes til metoden. Lad os overveje, du påkaldte doSomething()metode som denne:

 doSomething (1, 2, 3, 4);

Og din doSomething()metode er defineret som:

 // forkert metodedeklaration offentlig ugyldighed doSomething (int … nums, int p) (// method body)

I dette tilfælde kan kompilatoren ikke finde ud af antallet af argumenter, der sendes til numre.

Men hvis du definerer din metode som:

 offentligt tomrum doSomething (int p, int … nums) (// metode krop)

Java-kompileren tildeler det første argument til p, og de resterende intargumenter tildeles nums.

2. En metode kan kun have en varargs-parameter.

For eksempel er denne metodedeklaration forkert:

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

Tvetydighed i Varargs Method overbelastning

Lad os betragte din overbelastede test()metode som denne:

 klasse Demo (statisk ugyldighedstest (int… vargs) (// metodekrop) statisk ugyldig test (int n, int … vargs) (// metodekrop))

I ovenstående program bliver compileren forvirret, hvis du prøver at påberåbe sig test()metoden, selvom test()metoderne er overbelastede og accepterer forskellige antal argumenter.

Compileren ved ikke, hvilken metode der skal ringes til. Compileren tror måske, du prøver at ringe test(int… vargs)med et varargs-argument. Compileren kan også tænke, at du forsøger at ringe test(int n, int… vargs)med argument sendt til den første parameter med tom anden parameter.

Da der er to muligheder, forårsager det tvetydighed. På grund af dette kan det være nødvendigt at du bruger to forskellige metodenavne i stedet for at overbelaste varargs-metoden.

Interessante artikler...