Java Varargs (Argumente variabile) cu exemple

În acest articol, veți afla despre varargs în Java cu ajutorul exemplelor. De asemenea, veți învăța când să utilizați varargs și când să nu le utilizați.

Ce este varargs în Java?

Să presupunem că creați o metodă Java. Cu toate acestea, nu sunteți sigur câte argumente va accepta metoda dvs. Pentru a rezolva această problemă, Java 1.5 a introdus varargs.

Varargs este un nume scurt pentru argumentele variabile. În Java, un argument al unei metode poate accepta un număr arbitrar de valori. Acest argument care poate accepta un număr variabil de valori se numește varargs.

Sintaxa pentru implementarea varargs este următoarea:

 accessModifier methodName (tip de date … arg) (// corpul metodei)

Pentru a defini vararg, (trei puncte) este utilizat în parametrul formal al unei metode.

O metodă care ia un număr variabil de argumente se numește o metodă de aritate variabilă, sau pur și simplu o metodă varargs.

În primul rând, să privim exemplul fără a utiliza 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)); ) )

Când rulați acest program, ieșirea va fi:

 3 6

După cum puteți vedea clar, a trebuit să supraîncărcați sumNumber()metoda pentru a o face să funcționeze pentru 3 argumente.

Ce se întâmplă dacă utilizatorul dorește să adauge 5 numere sau 10 sau 100?

Acest lucru poate fi gestionat într-un mod îngrijit cu ajutorul varargs. Să vedem un exemplu de cod:

Exemplu: Prelucrarea 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); ) )

Când rulați programul, ieșirea va fi:

 lungimea argumentului: 2 sum2 = 6 lungimea argumentului: 3 sum3 = 9 lungimea argumentului: 4 sum4 = 16

Aici, sumNumber()metoda returnează suma intparametrilor trecuți (nu contează numărul de argumente transmise).

După cum puteți vedea, varargs pot fi cu adevărat utile în unele situații. Cu toate acestea, dacă sunteți sigur cu privire la numărul de argumente transmise unei metode, ați folosit în schimb supraîncărcarea metodei. De exemplu, dacă sunteți sigur că sumNumber()metoda va fi utilizată numai pentru a calcula suma a 2 sau 3 argumente, utilizați supraîncărcarea ca în primul exemplu.

Să luăm un alt exemplu. Metoda format () definită în biblioteca Java acceptă varargs. În JDK, format()metoda este definită după cum urmează:

 format public de șir static (Locale l, Format șir, Obiect … args) (// corp)

Exemplu: format () Metodă

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

Când rulați programul, ieșirea va fi:

 Nume site: programiz.com, Număr Emp: 6 Tip: site web tutorial 

Cum funcționează varargs în spatele scenei?

Să luăm în considerare următorul pseudo cod:

 public int sumNumber (int … nums) (// corpul metodei)

Sintaxa spune compilatorului Java că metoda poate fi apelată cu zero sau mai multe argumente. Ca rezultat, variabila nums este declarată implicit ca o matrice de tip int( ). Astfel, în interiorul metodei, variabila nums este accesată utilizând sintaxa matricei.

În cazul în care nu există argumente, lungimea numerelor este 0.

Metode Varargs de supraîncărcare

Similar metodelor tipice, puteți suprasolicita metodele vararg.

Citire recomandată: supraîncărcare a metodei Java

Exemplu: Metoda Varargs Supraîncărcarea

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

Când rulați programul, ieșirea va fi:

 sumă = 6 negare = argumente false. lungime = 2

În programul de mai sus, test()metoda este supraîncărcată prin schimbarea numărului de argumente pe care le acceptă.

Lucruri de reținut în timp ce utilizați Varargs

Iată câteva lucruri pe care ar trebui să le amintiți în timp ce lucrați cu Java Vargars:

1. În timp ce definiți semnătura metodei, păstrați întotdeauna varargs în cele din urmă.

Argumentul variabilă trebuie să fie ultimul argument transmis metodei. Să luăm în considerare, ați invocat doSomething()această metodă:

 faceCeva (1, 2, 3, 4);

Și doSomething()metoda dvs. este definită ca:

 // declarație metodă incorectă public nul doSomething (int … nums, int p) (// corpul metodei)

În acest caz, compilatorul nu poate afla numărul de argumente transmise nums.

Cu toate acestea, dacă vă definiți metoda ca:

 public void doSomething (int p, int … nums) (// corpul metodei)

Compilatorul Java atribuie primul argument lui p, iar intargumentele rămase sunt atribuite nums.

2. O metodă poate avea un singur parametru varargs.

De exemplu, această declarație de metodă este incorectă:

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

Ambiguitate în supraîncărcarea metodei Varargs

Să vă considerăm o test()metodă supraîncărcată astfel:

 clasă Demo (test de statică a golului (int … vargs) (// corpul metodei) test de golire statică (int n, int … vargs) (// corpul metodei))

În programul de mai sus, compilatorul devine confuz dacă încercați să invocați test()metoda, chiar dacă test()metodele sunt supraîncărcate și acceptă un număr diferit de argumente.

Compilatorul nu știe ce metodă să apeleze. Compilatorul poate crede că încercați să apelați test(int… vargs)cu un argument varargs. De asemenea, compilatorul poate crede că încercați să apelați test(int n, int… vargs)cu argumentul trecut la primul parametru cu al doilea parametru gol.

Deoarece există două posibilități, aceasta provoacă ambiguitate. Din această cauză, uneori poate fi necesar să utilizați două nume de metode diferite în loc să supraîncărcați metoda varargs.

Articole interesante...