Java Varargs (променливи аргументи) с примери

В тази статия ще научите за varargs в Java с помощта на примери. Също така ще научите кога да използвате varargs и кога да не ги използвате.

Какво представлява varargs в Java?

Да предположим, че създавате Java метод. Не сте сигурни обаче колко аргументи ще приеме вашият метод. За да се справи с този проблем, Java 1.5 въведе varargs.

Varargs е кратко име за променливи аргументи. В Java аргумент на метод може да приеме произволен брой стойности. Този аргумент, който може да приеме променлив брой стойности, се нарича varargs.

Синтаксисът за внедряване на varargs е както следва:

 accessModifier methodName (тип данни … аргумент) (// тяло на метода)

За да се определи vararg, (три точки) се използва във формалния параметър на метод.

Метод, който взема променлив брой аргументи, се нарича метод с променлива артерия или просто метод на varargs.

Първо, нека разгледаме примера, без да използваме 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)); ) )

Когато стартирате тази програма, изходът ще бъде:

 3 6

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

Ами ако потребителят иска да добави 5 числа или 10 или 100?

С това може да се справи по един изряден начин с използването на varargs. Нека видим пример за код:

Пример: Работа на varargs

 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 sum2 = 6 дължина на аргумента: 3 sum3 = 9 дължина на аргумента: 4 sum4 = 16

Тук sumNumber()методът връща сумата от intпараметри, предадени към него (няма значение броя на предадените аргументи).

Както можете да видите, varargs могат да бъдат наистина полезни в някои ситуации. Ако обаче сте сигурни в броя на аргументите, предадени на метод, вместо това се използва претоварване на метода. Например, ако сте сигурни, че sumNumber()методът ще се използва само за изчисляване на сумата от 2 или 3 аргумента, използвайте претоварване, както в първия пример.

Да вземем друг пример. Методът format (), дефиниран в библиотеката на Java, приема varargs. В JDK format()методът се дефинира, както следва:

 публичен статичен формат на низ (локал l, формат на низ, обект … аргументи) (// тяло)

Пример: Метод 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 ) ); ) )

Когато стартирате програмата, изходът ще бъде:

 Име на сайта: programiz.com, Emp Count: 6 Тип: уебсайт с уроци 

Как varargs работи зад сцената?

Нека разгледаме следния псевдо код:

 public int sumNumber (int … nums) (// тяло на метода)

В синтаксиса разказва Java компилатор, че методът може да се нарече с нула или повече аргументи. В резултат на това променливата nums е имплицитно декларирана като масив от тип int( ). По този начин, вътре в метода, променливата nums се осъществява чрез синтаксиса на масива.

В случай на липса на аргументи, дължината на числата е 0.

Претоварване на методите на Varargs

Подобно на типичните методи, можете да претоварите методите на vararg.

Препоръчително четене: Претоварване на Java метод

Пример: Претоварване на метод Varargs

 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()методът е претоварен чрез промяна на броя на аргументите, които приема.

Неща, които трябва да запомните, докато използвате Varargs

Ето няколко неща, които трябва да запомните, докато работите с Java vargars:

1. Докато дефинирате подпис на метода, винаги пазете най-накрая varargs.

Аргументът на променливата трябва да е последният аргумент, предаден на метода. Нека помислим, че сте извикали doSomething()метод по следния начин:

 doSomething (1, 2, 3, 4);

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

 // неправилно деклариране на метод public void doSomething (int… nums, int p) (// тяло на метода)

В този случай компилаторът не може да разбере броя на аргументите, предадени на nums.

Ако обаче дефинирате метода си като:

 public void doSomething (int p, int … nums) (// тяло на метода)

Компилаторът на Java присвоява първия аргумент на p, а останалите intаргументи се присвояват на номера.

2. Методът може да има само един параметър varargs.

Например тази декларация на метода е неправилна:

 int doSomething (int p, float … floatNums, double … doubleNums) (// код)

Неяснота при претоварване на метод Varargs

Нека помислим за претоварен test()метод по следния начин:

 class Demo (static void test (int … vargs) (// body of method) static void test (int n, int … vargs) (// body of body))

В горната програма компилаторът се обърква, ако се опитате да извикате test()метода, въпреки че test()методите са претоварени и приема различен брой аргументи.

Компилаторът не знае кой метод да извика. Компилаторът може да мисли, че се опитвате да се обадите test(int… vargs)с един аргумент varargs. Също така, компилаторът може да мисли, че се опитвате да се обадите test(int n, int… vargs)с аргумент, предаден на първия параметър с празен втори параметър.

Тъй като има две възможности, това води до неяснота. Поради това понякога може да се наложи да използвате две различни имена на методи, вместо да претоварвате метода на varargs.

Интересни статии...