Java之可变参数知多少?

作者: 程就人生 | 来源:发表于2019-06-08 20:52 被阅读0次
    可变参数简介

    可变参数 是Java 1.5版本新增的功能,又被称为Varargs机制,Varargs是variable number of arguments的简称,意思为参数个数可变函数,其展现形式为 参数参数类型 之间加上 ...,也就是在 参数类型 的后面加三个点。参数有实参和形参之分,方法上的参数是形参,可变参数是针对形参的。

    使用场景一

    从前台传递参数到后台,比如传递一个字符串数组;
    原始的写法:

    /**
         * 用数组接收参数
         * @param str
         * @return
         *
         */
        @PostMapping("/test/array1")
        public Object testArray1(@RequestParam(value="str")String[] str){
            return str;
        }
    

    用可变参数可以这样写:

    /**
         * 用可变参数接收参数
         * @param str
         * @return
         *
         */
        @PostMapping("/test/array2")
        public Object testArray2(@RequestParam(value="str")String... str){
            return str;
        }
    
    使用场景二

    后台方法间的调用,如果参数类型一样,参数个数不同,则可以使用可变参数,这样就省去了写多个类似的方法;

    /**
         * 可变参数测试
         * @param argo
         *
         */
        public static void main(String[] argo){
            sum(1);
            sum(1,2);
            sum(1,2,3);
            sum(3,2,4);
        }
        
        /**
         * 可变参数使用
         * @param number
         *
         */
        public static void sum(int... number){
            int count = 0;
            for(int n : number){
                count+=n;
            }
            System.out.println(count);
        }
    

    输出结果为:

    1
    3
    6
    9
    
    注意事项

    如果有多个参数时,可变参数一定要放在最后面,特别是相同参数类型的参数;

    /**
         * 可变参数测试
         * @param argo
         *
         */
        public static void main(String[] argo){
            testStr("ming","zhang");
            testStr("ming","zhang","足球");
            testStr("ming","zhang","足球","跑步");
                   //也可以像上面的例子一样传递数组
            String[] aa = new String[3];
            aa[0] = "足球";
            aa[1] = "跑步";
            aa[2] = "音乐";
            testStr("ming","zhang",aa);
        }
        
        /**
         * 测试多个相同类型的参数
         * @param lastName
         * @param firstName
         * @param hobby
         *
         */
        public static void testStr(String lastName,String firstName,String... hobby){
            System.out.println("firstName:" + firstName + ", lastName:" + ",hobby:" + StringUtils.join(hobby));
        }
    

    输出结果为:

    firstName:zhang, lastName:,hobby:
    firstName:zhang, lastName:,hobby:足球
    firstName:zhang, lastName:,hobby:足球,跑步
    firstName:zhang, lastName:,hobby:足球,跑步,音乐
    

    在一个类中,相同的可变参数不要重复出现,以免让编译器傻傻分不清,像下面这种情况,编译器就直接报错了。


    图-1

    总结
    可变参数需要用在合适的场合,但是也不能滥用,如果定义的方法自己都含含糊糊,界限不够清晰,编译器也会分不清。使用可变参数,最初还是因为,从前台往后台传递字符串数组总是报错,这才使用了可变参数。可变参数是一种机制,也是一个小小的技巧,技巧用对了,才能发挥作用。

    微信扫一扫,关注程就人生公众号

    相关文章

      网友评论

        本文标题:Java之可变参数知多少?

        本文链接:https://www.haomeiwen.com/subject/bofwxctx.html