Java Varargs (variable argumenter) med eksempler

I denne artikkelen vil du lære om varargs i Java ved hjelp av eksempler. Du vil også lære når du skal bruke varargs og når du ikke skal bruke dem.

Hva er varargs i Java?

La oss anta at du lager en Java-metode. Du er imidlertid ikke sikker på hvor mange argumenter metoden din vil godta. For å løse dette problemet introduserte Java 1.5 vargs.

Varargs er et kort navn for variable argumenter. I Java kan et argument av en metode akseptere vilkårlig antall verdier. Dette argumentet som kan akseptere variabelt antall verdier kalles varargs.

Syntaksen for implementering av varargs er som følger:

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

For å definere vararg brukes (tre prikker) i den formelle parameteren til en metode.

En metode som tar variabelt antall argumenter kalles en variabel aritetsmetode, eller bare en varargs-metode.

La oss først se på eksemplet uten å bruke 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 kjører dette programmet, vil utdataene være:

 3 6

Som du tydelig kan se, måtte du overbelaste sumNumber()metoden for å få den til å fungere for 3 argumenter.

Hva om brukeren vil legge til 5 tall eller 10 eller 100?

Dette kan håndteres på en pen måte ved bruk av varargs. La oss se et kodeeksempel:

Eksempel: Arbeid av 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 kjører programmet, vil utdataene være:

 argumentlengde: 2 sum2 = 6 argumentlengde: 3 sum3 = 9 argumentlengde: 4 sum4 = 16

Her sumNumber()returnerer metoden summen av intparametere som sendes til den (spiller ingen rolle antall argumenter som er sendt).

Som du kan se, kan varargs være veldig nyttig i noen situasjoner. Men hvis du er sikker på antall argumenter som sendes til en metode, brukte du metodeoverbelastning i stedet. Hvis du for eksempel er sikker på at sumNumber()metoden bare vil bli brukt til å beregne summen av enten 2 eller 3 argumenter, bruk overbelastning som i det første eksemplet.

La oss ta et annet eksempel. Formatet () -metoden som er definert i Java-biblioteket, godtar varianter. I JDK er format()metoden definert som følger:

 offentlig statisk strengformat (lokalitet 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 kjører programmet, vil utdataene være:

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

Hvordan fungerer varargs bak scenen?

La oss vurdere følgende pseudokode:

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

Den syntaks forteller Java kompilatoren at metoden kan kalles med null eller flere argumenter. Som et resultat blir nums-variabelen implisitt erklært som en matrise av typen int( ). Dermed er det tilgang til nums-variabelen i metoden ved hjelp av array-syntaksen.

I tilfelle ingen argumenter er lengden på nums 0.

Overbelastning av Varargs-metoder

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

Anbefalt lesing: Overbelastning av Java-metoden

Eksempel: Varargs Method Overloading

 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 kjører programmet, vil utdataene være:

 sum = 6 negate = false args.length = 2

I programmet ovenfor er test()metoden overbelastet ved å endre antall argumenter den aksepterer.

Ting å huske mens du bruker Varargs

Her er noen ting du bør huske når du jobber med Java-vargars:

1. Mens du definerer metodesignatur, må du alltid ha vargs endelig.

Variabelargumentet må være det siste argumentet som ble sendt til metoden. La oss vurdere, du påkalte doSomething()metoden slik:

 doSomething (1, 2, 3, 4);

Og doSomething()metoden din er definert som:

 // feil metodeerklæring offentlig ugyldig doSomething (int… nums, int p) (// method body)

I dette tilfellet kan ikke kompilatoren finne ut antall argumenter som sendes til numre.

Men hvis du definerer metoden din som:

 public void doSomething (int p, int … nums) (// method body)

Java-kompilatoren tilordner det første argumentet til p, og de gjenværende intargumentene tildeles nums.

2. En metode kan bare ha en varargs-parameter.

For eksempel er denne metodedeklarasjonen feil:

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

Tvetydighet i Varargs Method overbelastning

La oss betrakte deg som overbelastet test()metode slik:

 klasse Demo (statisk ugyldighetstest (int… vargs) (// metode kropp) statisk ugyldig test (int n, int… vargs) (// metode kropp))

I programmet ovenfor blir kompilatoren forvirret hvis du prøver å påkalle test()metoden selv om test()metodene er overbelastet og godtar forskjellig antall argumenter.

Kompilatoren vet ikke hvilken metode som skal ringes. Kompilatoren kan tenke at du prøver å ringe test(int… vargs)med ett varargs-argument. Kompilatoren kan også tro at du prøver å ringe test(int n, int… vargs)med argument sendt til den første parameteren med tom andre parameter.

Siden det er to muligheter, forårsaker det tvetydighet. På grunn av dette kan det hende at du må bruke to forskjellige metodenavn i stedet for å overbelaste varargs-metoden.

Interessante artikler...