文章作者:Tyan

1. 可变参数Varargs介绍

在JDK 1.5之前,要想在方法中使用可变参数,则必须通过数组(或其它集合)来实现,在这种情况下你需要将变量显式的定义在数组中,在使用时要从数组中取出变量。另一种方法是进行函数重载。而在JDK 1.5中,引入了可变参数(Varargs),全称为variable number of arguments,常被称为variable arguments。可变参数仍然是通过数组来实现的,只不过编译器帮你隐式的实现了这个过程,此外,它还能兼容以前的API。

可变参数,也就是说可以在参数列表中使用个数不确定的参数,最经典的例子就是Java中的main方法,参数的个数没有办法确定,此时就可以使用可变参数来处理方法中的参数。使用时可以按照数组的使用方式来用。

下面是可变参数定义的例子:

public static String format(String pattern, Object... arguments) {
    ...
    for(Object temp : arguments) {
        //业务逻辑
    }
    ...
}

2. 使用可变参数的一个例子

public class IntSum {

    public int sum(int... intArray) {
        int sumInt = 0 ;
        for (int temp : intArray) {
            sumInt += temp;
        }
        return sumInt;
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        IntSum test = new IntSum();
        System.out.println(test.sum(1));
        System.out.println(test.sum(1, 2));
        System.out.println(test.sum(1, 2, 3));

    }

}

输出结果为:1,3,6。

public class IntSum {

    public int sum(int a) {
        return 0;
    }

    public int sum(int... intArray) {
        int sumInt = 0 ;
        for (int temp : intArray) {
            sumInt += temp;
        }
        return sumInt;
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        IntSum test = new IntSum();
        System.out.println(test.sum(1));
        System.out.println(test.sum(1, 2));
        System.out.println(test.sum(1, 2, 3));

    }

}

输出结果为:0,3,6

3. 使用可变参数的注意事项

  • 可变参数只有当参数数目不确定时才会使用。
  • 当参数中需要T[]作为参数时,可以考虑使用可变参数。
  • 可变参数只能用在参数列表中的最后一个位置,且方法中只能有一个可变参数。
  • 在方法调用时,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则优先选择固定参数的方法。
  • 由于使用可变参数需要隐式的创建匿名数组并初始化,因此会影响性能,在性能优先的情况下慎用。
  • 尽量避免重载含有可变参数的方法。
  • 可变参数输入时不能传null值。
  • Arrays.asList()方法支持可变参数。

参考资料:

1、Effective Java 2.0