Java Varargs (variabla argument) med exempel

I den här artikeln lär du dig mer om varargs i Java med hjälp av exempel. Du lär dig också när du ska använda varargs och när du inte ska använda dem.

Vad är varargs i Java?

Låt oss anta att du skapar en Java-metod. Du är dock inte säker på hur många argument din metod kommer att acceptera. För att lösa detta problem introducerade Java 1.5 varargs.

Varargs är ett kort namn för variabla argument. I Java kan ett argument av en metod acceptera godtyckligt antal värden. Detta argument som kan acceptera variabelt antal värden kallas varargs.

Syntaksen för att implementera varargs är som följer:

 accessModifier methodName (datatype … arg) (// method body)

För att definiera vararg används (tre punkter) i den formella parametern för en metod.

En metod som tar variabelt antal argument kallas en variabel aritetsmetod eller helt enkelt en varargs-metod.

Låt oss först titta på exemplet utan att använda 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)); ) )

När du kör det här programmet kommer utmatningen att vara:

 3 6

Som du tydligt kan se var du tvungen att överbelasta sumNumber()metoden för att få den att fungera för 3 argument.

Vad händer om användaren vill lägga till 5 siffror eller 10 eller 100?

Detta kan hanteras på ett snyggt sätt med användning av varargs. Låt oss se ett kodexempel:

Exempel: Arbete av vargar

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

När du kör programmet blir resultatet:

 argumentlängd: 2 sum2 = 6 argumentlängd: 3 sum3 = 9 argumentlängd: 4 sum4 = 16

Här sumNumber()returnerar metoden summan av intparametrar som skickats till den (spelar ingen roll antalet skickade argument).

Som du kan se kan varargs vara riktigt bra i vissa situationer. Men om du är säker på hur många argument som skickas till en metod, använd metod överbelastning istället. Om du till exempel är säker på att sumNumber()metoden endast kommer att användas för att beräkna summan av antingen 2 eller 3 argument, använd överbelastning som i det första exemplet.

Låt oss ta ett annat exempel. Format () -metoden som definieras i Java-biblioteket accepterar vargar. I JDK format()definieras metoden enligt följande:

 offentligt statiskt strängformat (språk l, strängformat, objekt … args) (// body)

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

När du kör programmet blir resultatet:

 Webbplatsnamn: programiz.com, Emp Count: 6 Typ: tutorials webbplats 

Hur fungerar varargs bakom scenen?

Låt oss överväga följande pseudokod:

 public int sumNumber (int… nums) (// method body)

Den syntax berättar Java kompilator att metoden kan anropas med noll eller fler argument. Som ett resultat förklaras nums-variabel implicit som en matris av typ int( ). Inom metoden nås således nums-variabeln med hjälp av array-syntaxen.

Om det inte finns några argument är längden på nums 0.

Överbelastning av Varargs-metoder

I likhet med typiska metoder kan du överbelasta vararg-metoder.

Rekommenderad läsning: Java Method Overloading

Exempel: Varargs Method Overloading

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

När du kör programmet blir resultatet:

 summa = 6 negera = falsk args.längd = 2

I ovanstående program test()överbelastas metoden genom att ändra antalet argument den accepterar.

Saker att komma ihåg när du använder Varargs

Här är några saker du bör komma ihåg när du arbetar med Java-vargar:

1. Håll alltid varargs äntligen medan du definierar metodesignatur.

Variabelargumentet måste vara det sista argumentet som skickades till metoden. Låt oss överväga att du åberopade doSomething()metoden så här:

 doSomething (1, 2, 3, 4);

Och din doSomething()metod definieras som:

 // felaktig metoddeklaration public void doSomething (int … nums, int p) (// method body)

I det här fallet kan kompilatorn inte räkna ut antalet argument som skickats till numren.

Men om du definierar din metod som:

 public void doSomething (int p, int … nums) (// metod kropp)

Java-kompilatorn tilldelar det första argumentet till p, och de återstående intargumenten tilldelas num.

2. En metod kan bara ha en varargs-parameter.

Till exempel är denna metoddeklaration felaktig:

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

Oklarhet i överbelastning av Varargs-metoden

Låt oss överväga din överbelastade test()metod så här:

 klass Demo (statiskt tomrumstest (int… vargs) (// metod kropp) statiskt tomrum test (int n, int… vargs) (// metod kropp))

I ovanstående program blir kompilatorn förvirrad om du försöker åberopa test()metoden även om test()metoderna är överbelastade och accepterar olika antal argument.

Kompilatorn vet inte vilken metod som ska ringas. Kompilatorn kanske tänker, du försöker ringa test(int… vargs)med ett varargs-argument. Dessutom kan kompilatorn tänka att du försöker ringa test(int n, int… vargs)med argument skickat till den första parametern med tom andra parameter.

Eftersom det finns två möjligheter orsakar det tvetydighet. På grund av detta kan du ibland behöva använda två olika metodnamn istället för att överbelasta varargs-metoden.

Intressanta artiklar...