Java Varargs (mainīgie argumenti) ar piemēriem

Šajā rakstā jūs uzzināsit par Java variantiem, izmantojot piemērus. Jūs arī uzzināsiet, kad lietot varargus un kad tos nelietot.

Kas ir Java varargs?

Pieņemsim, ka jūs veidojat Java metodi. Tomēr jūs neesat pārliecināts, cik argumentus jūsu metode pieņems. Lai risinātu šo problēmu, Java 1.5 ieviesa varargus.

Varargs ir īss nosaukums mainīgo argumentiem. Java valodā metodes arguments var pieņemt patvaļīgu vērtību skaitu. Šo argumentu, kas var pieņemt mainīgo vērtību skaitu, sauc par varargiem.

Varargu ieviešanas sintakse ir šāda:

 accessModifier methodName (datu tips… arg) (// metodes pamatteksts)

Lai definētu varargu, metodes formālajā parametrā tiek izmantots (trīs punkti).

Metodi, kas prasa mainīgu argumentu skaitu, sauc par mainīgā aritāta metodi vai vienkārši par vararga metodi.

Vispirms apskatīsim piemēru, neizmantojot varargus:

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

Palaidot šo programmu, izeja būs:

 3 6

Kā jūs skaidri redzat, jums vajadzēja pārslogot sumNumber()metodi, lai tā darbotos 3 argumentos.

Ko darīt, ja lietotājs vēlas pievienot 5 ciparus vai 10 vai 100?

To var kārtīgi apstrādāt, izmantojot varargus. Apskatīsim koda piemēru:

Piemērs: Varargu darbs

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

Palaidot programmu, izeja būs:

 argumenta garums: 2 summa2 = 6 argumenta garums: 3 summa3 = 9 argumenta garums: 4 summa4 = 16

Šeit sumNumber()metode atgriež tai nodoto intparametru summu (nav nozīmes nodoto argumentu skaitam).

Kā redzat, varargi dažās situācijās var būt patiešām noderīgi. Tomēr, ja esat pārliecināts par metodei nodoto argumentu skaitu, tā vietā izmantoja metodes pārslodzi. Piemēram, ja esat pārliecināts, ka šī sumNumber()metode tiks izmantota tikai 2 vai 3 argumentu summas aprēķināšanai, izmantojiet pārslodzi, piemēram, pirmajā piemērā.

Ņemsim vēl vienu piemēru. Java bibliotēkā noteiktā formāta () metode pieņem varargus. JDK format()metodi nosaka šādi:

 publiskās statiskās virknes formāts (lokalizācija l, virknes formāts, objekts… args) (// pamatteksts)

Piemērs: formāts () 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 ) ); ) )

Palaidot programmu, izeja būs:

 Vietnes nosaukums: programiz.com, Emp Count: 6 Tips: apmācības vietne 

Kā varargs darbojas aiz ainas?

Apsvērsim šādu pseidokodu:

 public int sumNumber (int… nums) (// metodes pamatteksts)

Sintakse stāsta Java kompilatoru, ka metodi var nosaukt ar nulles vai vairākiem argumentiem. Rezultātā mainīgais nums tiek netieši deklarēts kā tipa masīvs int( ). Tādējādi metodes iekšienē mainīgajiem lielumiem piekļūst, izmantojot masīva sintaksi.

Ja nav argumentu, skaitļu garums ir 0.

Varargs metodes pārslodze

Līdzīgi kā tipiskām metodēm, vararg metodes var pārslogot.

Ieteicamā literatūra: Java metodes pārslodze

Piemērs: Varargs metodes pārslodze

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

Palaidot programmu, izeja būs:

 summa = 6 noliegt = nepatiesi arg. garums = 2

Iepriekš minētajā programmā test()metode ir pārslogota, mainot pieņemamo argumentu skaitu.

Lietas, kas jāatceras, lietojot Varargs

Šeit ir pāris lietas, kas jums jāatceras, strādājot ar Java vargāriem:

1. Nosakot metodes parakstu, vienmēr vienmēr saglabājiet varargus.

Mainīgajam argumentam jābūt pēdējam metodei nodotajam argumentam. Apsvērsim, jūs izmantojāt šādu doSomething()metodi:

 doS kaut kas (1, 2, 3, 4);

Jūsu doSomething()metode ir definēta kā:

 // nepareiza metodes deklarēšana public void doSomething (int… nums, int p) (// metodes pamatteksts)

Šajā gadījumā sastādītājs nevar noteikt argumentiem, kas nodoti summām.

Tomēr, ja definējat savu metodi kā:

 public void doSomething (int p, int… nums) (// metodes pamatteksts)

Java kompilators piešķir pirmo argumentu p, bet pārējie intargumenti tiek piešķirti summām.

2. Metodei var būt tikai viens varargs parametrs.

Piemēram, šī metodes deklarācija ir nepareiza:

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

Neskaidrība Vararga metodes pārslodzē

Pieņemsim, ka jūs esat pārslogota šāda test()metode:

 klases demonstrācija (static void test (int… vargs) (// method body) static void test (int n, int… vargs) (// method body))

Iepriekšminētajā programmā kompilators sajaucas, ja mēģināt izsaukt test()metodi, pat ja test()metodes ir pārslogotas un pieņem atšķirīgu argumentu skaitu.

Sastādītājs nezina, kuru metodi izsaukt. Sastādītājs var domāt, ka jūs mēģināt piezvanīt test(int… vargs)ar vienu varianta variantu. Kompilators var domāt, ka jūs mēģināt izsaukt test(int n, int… vargs)ar argumentu, kas nodots pirmajam parametram ar tukšu otro parametru.

Tā kā ir divas iespējas, tas rada neskaidrību. Tādēļ dažreiz varargu metodes pārslodzes vietā var būt nepieciešams izmantot divus dažādus metožu nosaukumus.

Interesanti raksti...