Java 可变长参数列表

时间:2019-03-18 20:29:14   收藏:0   阅读:149

Java中定义了变长参数,允许在调用方法时传入不定长度的参数。

定义及调用

在定义方法时,在最后一个形参后加上三点 …,就表示该形参可以接受多个参数值,多个参数值被当成数组传入。上述定义有几个要点需要注意:

public void foo(String...varargs){}

foo("arg1", "arg2", "arg3");

//上述过程和下面的调用是等价的
foo(new String[]{"arg1", "arg2", "arg3"});

例如,求任意个整数的乘积。

package exercise;

public class product {
    public static int func(int... args){
        int ret = 1;
        for(int i:args)  ret *= i;
        return ret;
    }
    public static void main(String[] args){
        System.out.println(func(1,2,3));
        System.out.println(func(2,2,2,2,2,2));
        System.out.println(func(100,1000));
    }
}

由于可变长参数就是被编译器转化为数组实现的,我们完全可以写成以数组做参数的形式:

package exercise;

public class product {
    public static int func(int[] args){
        int ret = 1;
        for(int i:args)  ret *= i;
        return ret;
    }
    public static void main(String[] args){
        System.out.println(func(new int[]{1,2,3}));
        System.out.println(func(new int[]{2,2,2,2,2,2}));
        System.out.println(func(new int[]{100,1000}));
    }
}

方法重载

优先匹配固定参数

调用一个被重载的方法时,如果此调用既能够和固定参数的重载方法匹配,也能够与可变长参数的重载方法匹配,则选择固定参数的方法:

public class Varargs {

    public static void test(String... args) {
        System.out.println("version 1");
    }

    public static void test(String arg1, String arg2) {
        System.out.println("version 2");
    }
    public static void main(String[] args) {
        test("a","b");     //version 2 优先匹配固定参数的重载方法
                test();    //version 1
    }
}

匹配多个可变参数

调用一个被重载的方法时,如果此调用既能够和两个可变长参数的重载方法匹配,则编译出错:

public class Varargs {

    public static void test(String... args) {
        System.out.println("version 1");
    }

    public static void test(String arg1, String... arg2) {
        System.out.println("version 2");
    }
    public static void main(String[] args) {
        test("a","b");  //Compile error
    }
}

 

 

参考链接:http://www.runoob.com/w3cnote/java-varargs-parameter.html

 

原文:https://www.cnblogs.com/lfri/p/10553555.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!