风人园

弱水三千,只取一瓢,便能解渴;佛法无边,奉行一法,便能得益。
随笔 - 99, 文章 - 181, 评论 - 56, 引用 - 0
数据加载中……

jdk1.5 Variable-Arity Methods(Varargs)

Variable-Arity Methods(Varargs)
可匹配不同长度的自变量的函数,意思就是说,定义好的同一个Method,可以接收个数不一样的变量,看起来有点类似于过载。
我们还是先来看一个例子吧。

[code]
//TestVarargs.java
public class TestVarargs{


//这个方法展示了varargs的基本语法
// 类型(Type),加3个点,再加变量名,中间可以有或无空格
// 而使用该变量时,是以一个Type[]的形式的,等于是一个Array
//public static void out(int...   i){//这种可以
//public static void out(int  ...i){//这种也可以
//public static void out(int  ...  i){//这种也可以
public static void out(int...i){//这种也可以
        System.out.println("method:out(int... i),vararg.length:"+i.length);
        if(i.length==0)
                return;
        //for-each  featrue
        for(Object ii:i)
                System.out.print("\t "+ii);
        System.out.println();
        }

//和 out(Object... i) 存在二义性
//public static void out(int i1,int... i){...}


//varargs 只能出现在parameter的最后
//public static void out(int... i,String s){...}

//当然,其他变量可以出现在前面。
public static void out(String s,int... i){
        System.out.println("method:out(String s,int... i),vararg.length:"+i.length);
        if(i.length==0)
                return;
        //for-each  future
        for(int ii:i)
                System.out.print("\t "+ii);
        System.out.println();
        }

public static void main(String args[]){
        out(123,1343,4542,677675);
        out(12323,43243,00);
        out("",12);
        out("");
        out();
        }
}
[/code]
该说明的基本上都在源码的注释里头了。
值得一提的是,根据JSR201的说法,对它的支持主要是在complier上,在VM的层面上是不需要支持的。在某种意义上,我们可以把它看作
[code]
        out(int...i){};
        out(123,1343,4542,677675);
        ==
        out(int[] i){};
        out(new Int[]{123,1343,4542,677675});
[/code]

posted on 2006-12-16 15:55 风人园 阅读(507) 评论(0)  编辑  收藏 所属分类: Java