zoukankan      html  css  js  c++  java
  • 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. 传统方式与这种方式的区别在于:这种方式传参时不必将参数先封装到一个数组里面。

  • 相关阅读:
    StateListDrawable状态选择器
    Shape
    每周随笔
    每周随笔
    每周随笔
    每周随笔
    每周随笔
    每周随笔
    每周随笔

  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/7526481.html
Copyright © 2011-2022 走看看