java如何实现不固定个数传参

CreateTime--2017年9月15日14:42:40

Author:Marydon

java如何实现不固定个数传参(定义实参个数可变的方法)

参考链接:原文链接

传统方法:为这个方法定义一个数组型的参数,将不确定的参数放到数组中,把这个数组作为一个实参传递过去

举例:

// 定义带有数组型参数的方法
int getSum(int[] params) {
    
}
// 调用
getSum(1,2,3);

方法:借助Varargs机制

J2SE 1.5提供了“Varargs”机制。借助这一机制,可以定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参;

Varargs:"variable number of arguments"

举例:

/**
 * 求和
 * @description
 *  定义实参个数可变
 * @param params
 *  >=0个int类型实参
 * @return
 */
static int getSum(int... params) {
    //
    int sum = 0;
    for (int i : params) {
        sum += i;
    }
    return sum;
}

// 调用
int sum = Test.getSum(1,2,3);
System.out.println(sum); // 6

注意事项:

  1.java不支持泛型数组,当数组元素类型不确定时,可以使用Object来定义该数组的数据类型;

  2.不能确定的参数个数的方法在定义时,该形参必须放在方法的最后一个参数;

  否则,编译报错:The variable argument type int of the method getSum must be the last parameter

  3.不能再为这个类定义一个和转化后的方法签名一致的方法;

   否则,编译报错:Duplicate method getSum(int[]) in type Test

   原因:在class文件编译时实际上将匹配不确定个实参的形参,转化为数组形参,即

static int getSum(int[] params) {
    //
    int sum = 0;
    for (int i : params) {
        sum += i;
    }
    return sum;
}  

  4.传0个实参时,传递过去的是一个空数组,而不是null;

  5. 传统方式与这种方式的区别在于:这种方式传参时不必将参数先封装到一个数组里面。

原文地址:https://www.cnblogs.com/Marydon20170307/p/7526481.html