„Java Varargs“ (kintantys argumentai) su pavyzdžiais

Šiame straipsnyje sužinosite apie „Java“ varargus naudodamiesi pavyzdžiais. Taip pat sužinosite, kada naudoti varargus, o kada jų nenaudoti.

Kas yra „Java“ varargas?

Tarkime, kad kuriate „Java“ metodą. Tačiau nesate tikri, kiek argumentų jūsų metodas priims. Norėdami išspręsti šią problemą, „Java 1.5“ pristatė varargus.

„Varargs“ yra trumpas kintamųjų argumentų pavadinimas. „Java“ metodo argumentas gali sutikti su savavališku reikšmių skaičiumi. Šis argumentas, galintis priimti kintamą reikšmių skaičių, vadinamas varargu.

Varargų diegimo sintaksė yra tokia:

 „accessModifier methodName“ (duomenų tipas… arg) (// metodo turinys)

Norint apibrėžti vararg, oficialiame metodo parametre naudojamas (trys taškai).

Metodas, reikalaujantis kintamo argumentų skaičiaus, vadinamas kintamo ariteto metodu arba tiesiog varargo metodu.

Pirmiausia pažvelkime į pavyzdį nenaudodami varargų:

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

Kai paleisite šią programą, išvestis bus:

 3 6

Kaip aiškiai matote, jums reikėjo perkrauti sumNumber()metodą, kad jis veiktų 3 argumentams.

Ką daryti, jei vartotojas nori pridėti 5 skaičius arba 10 ar 100?

Tai galima tvarkyti tvarkingai, naudojant varargus. Pažiūrėkime kodo pavyzdį:

Pavyzdys: Varargų darbas

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

Kai paleisite programą, išvestis bus:

 argumento ilgis: 2 suma2 = 6 argumento ilgis: 3 suma3 = 9 argumento ilgis: 4 suma4 = 16

Čia sumNumber()metodas grąžina jam intperduotų parametrų sumą (nesvarbu, kiek argumentų perduota).

Kaip matote, varargai gali būti tikrai naudingi kai kuriose situacijose. Tačiau jei esate tikras dėl argumentų, perduotų metodui, skaičiaus, vietoj to naudojo metodo perkrovą. Pvz., Jei esate tikri, kad šis sumNumber()metodas bus naudojamas tik 2 arba 3 argumentų sumai apskaičiuoti, naudokite perkrovą, kaip pirmame pavyzdyje.

Paimkime kitą pavyzdį. „Java“ bibliotekoje apibrėžtas formato () metodas priima varargus. JDK format()metodas apibrėžiamas taip:

 viešosios statinės eilutės formatas (lokalė l, eilutės formatas, objektas… argumentai) (// turinys)

Pavyzdys: format () metodas

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

Kai paleisite programą, išvestis bus:

 Svetainės pavadinimas: programiz.com, Emp Count: 6 Tipas: mokymo programos svetainė 

Kaip varargai veikia už scenos?

Apsvarstykime šį pseudo kodą:

 public int sumNumber (int… nums) (// metodo turinys)

Sintaksė pasakoja Java kompiliatorius, kad metodas gali būti vadinamas su nuline ar daugiau argumentų. Todėl nums kintamasis yra netiesiogiai deklaruojamas kaip tipo masyvas int( ). Taigi metodo viduje prie nums kintamojo pasiekiama naudojant masyvo sintaksę.

Jei nėra argumentų, skaičiaus ilgis yra 0.

„Varargs“ perkrovos metodai

Panašiai kaip įprasti metodai, galite perkrauti vararg metodus.

Rekomenduojamas skaitymas: „ Java“ metodo perkrovimas

Pavyzdys: „Varargs“ metodo perkrova

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

Kai paleisite programą, išvestis bus:

 suma = 6 neigti = klaidingi argumentai. ilgis = 2

Aukščiau pateiktoje programoje test()metodas perkraunamas keičiant priimtinų argumentų skaičių.

Dalykai, kuriuos reikia atsiminti naudojant „Varargs“

Štai keli dalykai, kuriuos turėtumėte prisiminti dirbdami su „Java“ kintamaisiais:

1. Apibrėždami metodo parašą, visada laikykitės varargų.

Kintamasis argumentas turi būti paskutinis metodui perduotas argumentas. Apsvarstykime, jūs pasinaudojote doSomething()tokiu metodu:

 doShathing (1, 2, 3, 4);

Jūsų doSomething()metodas apibrėžiamas taip:

 // neteisingas metodo deklaravimas public void doSomething (int… nums, int p) (// metodo turinys)

Šiuo atveju kompiliatorius negali išsiaiškinti argumentų, perduotų skaičiams, skaičiaus.

Tačiau jei apibrėžiate savo metodą kaip:

 public void doSomething (int p, int… nums) (// metodo turinys)

„Java“ kompiliatorius priskiria pirmąjį argumentą p, o likusieji intargumentai priskiriami skaičiams.

2. Metodas gali turėti tik vieną varargo parametrą.

Pavyzdžiui, šio metodo deklaracija yra neteisinga:

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

„Varargs“ metodo perkrovos dviprasmybė

Apsvarstykime test()tokį perkrautą metodą:

 klasės demonstracinė versija (statinis tuštumos testas (int… vargs) (// metodo turinys) statinis tuštumos testas (int n, int… vargs) (// metodo kūnas))

Ankstesnėje programoje kompiliatorius pasimeta, jei bandote pasinaudoti test()metodu, net jei test()metodai yra perkrauti ir priima skirtingą argumentų skaičių.

Kompiliatorius nežino, kurį metodą iškviesti. Kompiliatorius gali pagalvoti, kad jūs bandote skambinti test(int… vargs)vienu varargo argumentu. Kompiliatorius taip pat gali pagalvoti, kad jūs bandote skambinti test(int n, int… vargs)argumentu, perduotu pirmajam parametrui, tuščiu antruoju parametru.

Kadangi yra dvi galimybės, tai sukelia neaiškumų. Dėl to kartais gali tekti naudoti du skirtingus metodų pavadinimus, o ne perkrauti varargų metodą.

Įdomios straipsniai...