Java Varargs (muutuja argumendid) koos näidetega

Selles artiklis saate näiteid kasutades teada Java-i varargidest. Samuti saate teada, millal vararge kasutada ja millal mitte.

Mis on Java-s varargs?

Oletame, et loote Java-meetodit. Kuid te pole kindel, mitu argumenti teie meetod aktsepteerib. Selle probleemi lahendamiseks tõi Java 1.5 kasutusele varargid.

Varargs on muutujate argumentide lühike nimi. Javas saab meetodi argument aktsepteerida suvalise arvu väärtusi. Seda argumenti, mis võib aktsepteerida muutuvat arvu väärtusi, nimetatakse varargiteks.

Varargsi rakendamise süntaks on järgmine:

 accessModifier methodName (andmetüüp… arg) (// meetodi keha)

Varargi määratlemiseks kasutatakse meetodi formaalses parameetris (kolme punkti).

Meetodit, mis võtab muutuva arvu argumente, nimetatakse muutuja ariteetiga meetodiks või lihtsalt varargsi meetodiks.

Kõigepealt vaatame näidet ilma varargsi kasutamata:

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

Selle programmi käivitamisel on väljund järgmine:

 3 6

Nagu selgelt näete, pidite sumNumber()meetodit üle koormama, et see töötaks 3 argumendi jaoks.

Mis siis, kui kasutaja soovib lisada 5 numbrit või 10 või 100?

Sellega saab varargide abil kenasti hakkama. Vaatame koodi näidet:

Näide: Varargide töötamine

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

Programmi käivitamisel on väljund järgmine:

 argumendi pikkus: 2 sum2 = 6 argumendi pikkus: 3 summa3 = 9 argumendi pikkus: 4 summa4 = 16

Siin sumNumber()tagastab meetod talle edastatud intparameetrite summa (vahet pole, kui palju argumente on edastatud).

Nagu näete, võivad varargid olla mõnes olukorras tõesti kasulikud. Kuid kui olete meetodile edastatud argumentide arv kindel, kasutas selle asemel meetodi ülekoormamist. Näiteks kui olete kindel, et seda sumNumber()meetodit kasutatakse ainult 2 või 3 argumendi summa arvutamiseks, kasutage ülekoormamist nagu esimeses näites.

Võtame veel ühe näite. Java-teegis määratletud vormingu () meetod aktsepteerib varargse. JDK-s on format()meetod määratletud järgmiselt:

 avalik staatiline stringi formaat (lokaat l, stringi vorming, objekt … args) (// keha)

Näide: format () meetod

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

Programmi käivitamisel on väljund järgmine:

 Saidi nimi: programiz.com, Emp Count: 6 Tüüp: õpetuse veebisait 

Kuidas varargid kulisside taga toimivad?

Vaatleme järgmist pseudokoodi:

 public int sumNumber (int… nums) (// meetodi keha)

Süntaks räägib Java kompilaator, et meetod võib nimetada null või rohkem argumente. Selle tulemusel deklareeritakse muutuja nums kaudselt tüüpi massiivina int( ). Seega pääseb meetodi sees muutujale Nums massiivi süntaksiga.

Kui argumente pole, on nummide pikkus 0.

Varargsi meetodite ülekoormamine

Sarnaselt tavalistele meetoditele saate varargi meetodeid üle koormata.

Soovitatav lugemine: Java-meetodi ülekoormamine

Näide: Varargsi meetodi ülekoormamine

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

Programmi käivitamisel on väljund järgmine:

 summa = 6 eitama = vale arg. pikkus = 2

Ülaltoodud programmis on test()meetod üle koormatud, muutes aktsepteeritavate argumentide arvu.

Varargsi kasutamise ajal meeldejäävad asjad

Siin on paar asja, mida peaksite Java vargaritega töötades meeles pidama:

1. Meetodi allkirja määratlemisel hoidke alati alati varargid.

Muutujaargument peab olema viimane meetodile edastatud argument. Mõelgem, kas kasutasite doSomething()sellist meetodit:

 doShathing (1, 2, 3, 4);

Ja teie doSomething()meetod on määratletud järgmiselt:

 // vale meetodi deklaratsioon public void doSomething (int… nums, int p) (// meetodi keha)

Sel juhul ei suuda kompilaator välja selgitada, mitu argumenti arvudele edastatakse.

Kui määrate oma meetodi järgmiselt:

 public void doSomething (int p, int… nums) (// meetodi keha)

Java kompilaator määrab esimese argumendi p-le ja ülejäänud intargumendid määratakse numbritele.

2. Meetodil võib olla ainult üks varargsi parameeter.

Näiteks on selle meetodi deklaratsioon vale:

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

Mitmetähenduslikkus Varargsi meetodi ülekoormamisel

Mõelgem teile ülekoormatud test()meetodile järgmiselt:

 klassi demo (staatilise tühimiku test (int… vargs) (// meetodi keha) staatiline tühimiku test (int n, int… vargs) (// meetodi keha))

Ülaltoodud programmis satub kompilaator segadusse, kui proovite test()meetodit käivitada, kuigi test()meetodid on ülekoormatud ja aktsepteerivad erinevat arvu argumente.

Koostaja ei tea, millist meetodit helistada. Koostaja võib arvata, et proovite helistada test(int… vargs)ühe varargsi argumendiga. Samuti võib kompilaator arvata, et proovite helistada test(int n, int… vargs)argumendiga, mis edastatakse esimesele parameetrile tühja teise parameetriga.

Kuna on kaks võimalust, tekitab see ebaselgust. Seetõttu peate võib-olla varargsi meetodi ülekoormamise asemel mõnikord kasutama kahte erinevat meetodinime.

Huvitavad Artiklid...