可变参数总结(一)

Jdk1.5 Tiger 引入了可变参数,官方说法,variable arguments,简写为varargs,这个特性在某种程度上会简化我们的开发。下面我们开始看看varargs都有哪些特性。

 

可变参数与数组的关系

1、    当作为参数时,数组可以当做参数传给由可变参数作为参数的方法。举个例子:

public class MainTest {

    public static void main(String[] args) {

       MainTest.testVarargs(new String[] { "hello", "variable", "arguments" });

    }

    public static void testVarargs(String... strings) {

       for (String str : strings) {

           System.out.println(str);

       }

    }

}

 

2、    可变参数不能当做参数传给使用数组作为参数的方法,有一种情况是例外。

不能使用可变参数传给使用数组签名的方法的例子。

public class MainTest {

    public static void main(String[] args) {

       MainTest.testVarParam("hello","world");

    }

    public static void testVarParam(String[]strs){

       System.out.println(strs.toString());

    }

}

 

Eclipse中报错,出错的提示为:The method testVarParam(String[]) in the type MainTest is not applicable for the arguments (String, String)。意思就是说:testVarParam(String[])不能够被应用于两个string的参数。

唯一的一个特例,请看下面的这个例子:

public class MainTest {

    public static void main(String ... args) {

       for(String str : args) {

           System.out.println(str);

       }

    }

}

看看是不是能够正常跑起来,肯定能地,呵呵,其实可变参数jvm就是当做数组来处理的。Main方法能够跑起来也就不足为奇了。

 

参数的位置,只能位于参数列表的最后

              这个到底是为甚呢?为甚有这个约定呢?我们举个反例来看看,假如不位于最后一个位置的话,看看下面的程序报什么错

public class MainTest {

    public static void main(String [] args) {

    }

    public static void testVarArgs(int ...ints, String test) {

    }

}

             Eclipse里面又报错了,The variable argument type int of the method testVarArgs must be the last parameter。说那个int型的可变参数必须要位于最后一个。我自己总结了下:

如果可变参数不位于最后,那么java很难区分后面同一类型的参数是可变参数的一部分,还是另外一个单独的参数,所以java可变参数必须位于参数列表的最后位置上。如果有两个或者多个可变参数的话,如果类型相同的话,java也无法区分其中的某个具体参数到底是属于哪个可变参数,所以java只支持一个可变参数。

 

可变参数的重载

1、  可变参数方法与数组参数方法重载

public class MainTest {

    public static void testVarArgs(int ... ints) {

    }

    public static void testVarArgs(int[]ints){

    }

}

        Eclipse里面又报错了,具体的出错信息:Duplicate method testVarArgs(int[]) in type MainTest。即重复的方法定义,这个和我们前面讨论的可变参数与数组的关系的时候有一些重叠。

2、  可变参数方法与可变参数方法的重载

public class MainTest {

    public static void main(String [] args) {

       System.out.println(testVarArgs(10));

    }

    public static void testVarArgs(int ... ints) {

    }

    public static void testVarArgs(int a, int ...is){

    }

}

             Eclipse这个哥们在方法定义的时候没有报错,但是在方法调用的时候报错了,这个IDE还是满先进的,看看出错的信息:The method testVarArgs(int[]) is ambiguous for the type MainTest。意思就是testVarArgs(int[])是含糊不清的。Jvm不知道该执行那个方法。

 

可变参数可以用在构造函数上

    看看下面的例子:

public class MainTest {

    public static void main(String [] args) {

       MainTest test = new MainTest("hello", "world");

    }

   

    public MainTest(String ... strs) {

       for(String str : strs ) {

           System.out.println(str);

       }

    }

}

就当普通参数一样使用就OK了。

 

你可能感兴趣的:(eclipse,jvm,ide)