jdk1.5 Variable-Arity Methods(Varargs)
Variable-Arity Methods(Varargs)
可匹配不同長度的自變量的函數(shù),意思就是說,定義好的同一個Method,可以接收個數(shù)不一樣的變量,看起來有點類似于過載。
我們還是先來看一個例子吧。
[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 只能出現(xiàn)在parameter的最后
//public static void out(int... i,String s){...}
//當(dāng)然,其他變量可以出現(xiàn)在前面。
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]
該說明的基本上都在源碼的注釋里頭了。
值得一提的是,根據(jù)JSR201的說法,對它的支持主要是在complier上,在VM的層面上是不需要支持的。在某種意義上,我們可以把它看作
[code]
? ? ? ? out(int...i){};
? ? ? ? out(123,1343,4542,677675);
? ? ? ? ==
? ? ? ? out(int[] i){};
? ? ? ? out(new Int[]{123,1343,4542,677675});
[/code]
可匹配不同長度的自變量的函數(shù),意思就是說,定義好的同一個Method,可以接收個數(shù)不一樣的變量,看起來有點類似于過載。
我們還是先來看一個例子吧。
[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 只能出現(xiàn)在parameter的最后
//public static void out(int... i,String s){...}
//當(dāng)然,其他變量可以出現(xiàn)在前面。
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]
該說明的基本上都在源碼的注釋里頭了。
值得一提的是,根據(jù)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 風(fēng)人園 閱讀(515) 評論(0) 編輯 收藏 所屬分類: Java