Рубрики
Без рубрики

Java varargs

Java varargs, varargs в java, переменные аргументы java, пример java varargs, массив java varargs, метод java varargs, переменные аргументы в примере java.

Автор оригинала: Pankaj Kumar.

Java varargs был представлен в Java 1.5. Java varargs также известен как аргументы переменной java .

Java varargs

varargs в java позволяет методу принимать переменное число аргументов. Мы используем три точки ( … ), также известные как многоточие, в сигнатуре метода, чтобы заставить его принимать переменные аргументы. Например;

public static int sum(int i, int...js ){
//do something
}

Важные моменты о varargs на java

Несколько моментов, которые нужно знать о varargs на java, это;

  1. У нас может быть только один варарг в методе.
  2. Только последним аргументом метода может быть varargs.
  3. Согласно документации java, мы не должны перегружать метод varargs. Мы увидим, почему это не очень хорошая идея.

Как работают java-варарги?

Когда мы вызываем метод с переменными аргументами, компилятор java сопоставляет аргументы слева направо. Как только он достигает последнего параметра varargs, он создает массив оставшихся аргументов и передает его методу. На самом деле параметр varargs ведет себя как массив указанного типа.

//method with variable arguments
public static int sum(int i, int...js ){
    int sum = i;
    for(int x : js){
        sum+=x;
    }
    return sum;
}

//method with same implementation as sum with array as argument
public static int sumArray(int i, int[] js ){
    int sum = i;
    for(int x : js){
        sum+=x;
    }
    return sum;
}

Если вы посмотрите на оба метода sum и sum Array , вы увидите, что тело реализации точно такое же. Поэтому мы должны использовать varargs, когда API предлагает их, например java.io.PrintStream.printf() метод, но мы не должны использовать его в качестве замены массива.

Почему мы не должны перегружать метод varargs

Давайте рассмотрим пример, почему перегрузка метода java varargs не является хорошей идеей.

package com.journaldev.misc;

public class VarargsExample {

    public static void main(String[] args) {
        System.out.println(sum(1));
        System.out.println(sum(1,2)); //compiler error, ambiguous method

    }

    public static int sum(int i, int...js ){
        System.out.println("sum1 called");
        int sum = i;
        for(int x : js){
            sum+=x;
        }
        return sum;
    }
    public static int sum(int i, int k, Object...js ){
        System.out.println("sum2 called");
        int sum = i+k;
        for(Object x : js){
            sum+=1;
        }
        return sum;
    }
    
}

В приведенном выше примере вы заметите, что компилятор не будет жаловаться, когда мы перегружаем методы с помощью varargs. Но когда мы пытаемся его использовать, компилятор путается, какой метод использовать при сопоставлении второго аргумента.

Если есть только один аргумент, компилятору разумно использовать первый метод, потому что он может работать как минимум с одним аргументом, но второму методу требуется как минимум два аргумента. На изображении ниже из Eclipse показано сообщение об ошибке как Метод sum(int, int[]) неоднозначен для примера типа Varargs .

Это все о java varargs. Это полезно знать, но вам не нужно использовать его при написании кода самостоятельно.

Ссылка: Официальная документация