Јава Вараргс (променљиви аргументи) са примерима

У овом чланку ћете научити о варарговима у Јави уз помоћ примера. Такође ћете научити када се користе вараргови, а када не.

Шта је вараргс у Јави?

Претпоставимо да креирате Јава методу. Међутим, нисте сигурни колико аргумената ће ваша метода прихватити. Да би решила овај проблем, Јава 1.5 је увела вараргс.

Вараргс је кратко име за променљиве аргументе. У Јави аргумент методе може прихватити произвољан број вредности. Овај аргумент који може да прихвати променљиви број вредности назива се вараргс.

Синтакса за примену вараргова је следећа:

 аццессМодифиер метходНаме (тип података… аргумент) (// тело методе)

Да би се дефинисао варарг, (три тачке) се користи у формалном параметру методе.

Метода која узима променљиви број аргумената назива се методом променљиве арити, или једноставно вараргс методом.

Прво, погледајмо пример без употребе вараргова:

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

Када покренете овај програм, излаз ће бити:

 3 6

Као што јасно видите, морали сте да преоптеретите sumNumber()методу да би функционисао за 3 аргумента.

Шта ако корисник жели да дода 5 бројева или 10 или 100?

Ово се може на уредан начин решити уз употребу варарга. Погледајмо пример кода:

Пример: Рад варарга

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

Када покренете програм, излаз ће бити:

 дужина аргумента: 2 сум2 = 6 дужина аргумента: 3 сум3 = 9 дужина аргумента: 4 сума4 = 16

Овде sumNumber()метода враћа збир intпараметара који су јој прослеђени (није битно број прослеђених аргумената).

Као што видите, варарги могу бити заиста корисни у неким ситуацијама. Међутим, ако сте сигурни у број аргумената прослеђених методи, уместо тога користите преоптерећење методе. На пример, ако сте сигурни да sumNumber()ће се та метода користити само за израчунавање збира 2 или 3 аргумента, користите преоптерећење као у првом примеру.

Узмимо још један пример. Метода формат () дефинисана у Јава библиотеци прихвата вараргс. У ЈДК, format()метода је дефинисана на следећи начин:

 јавни статични формат низа (локалитет л, формат низа, објект … аргс) (// тело)

Пример: метода формат ()

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

Када покренете програм, излаз ће бити:

 Назив веб локације: програмиз.цом, Број појављивања: 6 Тип: веб локација са водичима 

Како вараргс ради иза сцене?

Размотримо следећи псеудо код:

 публиц инт сумНумбер (инт… нумс) (// тело методе)

Синтакса говори Јава компајлер који начин се може назвати са нула или више аргумената. Као резултат, променљива нумс је имплицитно декларисана као низ типа int( ). Дакле, унутар методе, променљивој нумс се приступа користећи синтаксу низа.

У случају да нема аргумената, дужина бројева је 0.

Преоптерећење Вараргових метода

Слично типичним методама, и ви можете преоптеретити варарг методе.

Препоручено читање: Преоптерећење Јава методе

Пример: Преоптерећење Вараргс методе

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

Када покренете програм, излаз ће бити:

 сума = 6 негација = лажне аргументе.дужина = 2

У горњем програму, test()метода је преоптерећена променом броја аргумената које прихвата.

Ствари које треба запамтити док користите Вараргс

Ево неколико ствари које бисте требали запамтити током рада са Јава варгарима:

1. Док дефинишете потпис методе, увек напокон задржите вараргс.

Аргумент променљиве мора бити последњи аргумент прослеђен методи. Размотримо, ви сте се позвали на doSomething()метод попут овог:

 доСометхинг (1, 2, 3, 4);

И, ваш doSomething()метод је дефинисан као:

 // нетачна декларација методе публиц воид доСометхинг (инт… нумс, инт п) (// тело методе)

У овом случају, компајлер не може да утврди број аргумената прослеђених нумс.

Међутим, ако свој метод дефинишете као:

 јавна воид доСометхинг (инт п, инт … нумс) (// тело методе)

Јава компајлер додељује први аргумент п, а преостали intаргументи нумб.

2. Метода може имати само један параметар вараргс.

На пример, ова декларација методе је нетачна:

 инт доСометхинг (инт п, флоат … флоатНумс, доубле … доублеНумс) (// код)

Двосмисленост у преоптерећењу Вараргс методе

Размотримо да сте преоптерећени test()метод попут овог:

 класа Демо (статички воид тест (инт… варгс) (// тело методе) статички воид тест (инт н, инт … варгс) (// тело методе))

У горе наведеном програму, преводилац се збуњује ако покушате да позовете test()методу иако су test()методе преоптерећене и прихвата различит број аргумената.

Компајлер не зна који метод да позове. Компајлер може помислити, покушавате да позовете test(int… vargs)са једним аргументом вараргс. Такође, компајлер може помислити, покушавате да позовете test(int n, int… vargs)са аргументом прослеђеним првом параметру са празним другим параметром.

Будући да постоје две могућности, то узрокује двосмисленост. Због тога ће вам понекад требати да користите два различита имена метода уместо да преоптеретите методу вараргс.

Занимљиви Чланци...