所以這裡就分享給跟我一樣還沒不知的人
為什麼它會好用,先來看看以前沒用它時遇到了什麼問題
以前在寫 method 時,對於想要傳入的資料數量不是固定時,通常都是用 Array 或 Collections 來處理,例如
public class Test { public static void test(Object[] args){ for( Object o:args ){ System.out.println(o); } } }
呼叫的方法例如
Test.test( new Object[]{"123","abc"} );
但這樣,若資料數量只有一兩個時,每次呼叫都還要去建立一個 Array,也是挺麻煩的
一天到晚打字,而且工作又有時程的壓力,所以就算少打幾個字也爽
這種時候,總是會想,能不能直接如下這樣呼叫
Test.test("123","abc");
所以,為了達到這個需求,我們會再用 Overloading 的方式,在 Test 中再加幾個 method
public class Test { public static void test(Object[] args){ for( Object o:args ){ System.out.println(o); } } public static void test(Object arg){ test(new Object[]{arg}); } public static void test(Object arg1,Object arg2){ test(new Object[]{arg1,arg2}); } public static void test(Object arg1,Object arg2,Object arg3){ test(new Object[]{arg1,arg2,arg3}); } //以此類推,想有幾個就寫幾個 }
這樣一來,呼叫的人是爽了沒錯,但卻累了提供 method 的人了
且這樣總還是有數量的限制
不過,現在提供 method 的人有福了,有了 Varargs,寫起來相當輕鬆
只要寫一個 method,就能達到上面所有需求
寫法幾乎就跟一開始的那個 method 一樣
public class Test { public static void test(Object... args){ for( Object o:args ){ System.out.println(o); } } }看出差別了嗎?參數型態不再是 Object[],而是 Object... ,關鍵就在於這個「...」
它就是 Varargs 語法,它就代表可以傳入任意數量的參數,或者是 Array
所以此時,除了可以這樣呼叫之外
Test.test( new Object[]{"123","abc"} );也可以這樣呼叫
Test.test("123","abc");
是不是非~常的方便呢 *^____^* ,真是愛死它了
不過,在使用時要注意一點,同一個 method 中,這樣的參數只能有一個,且必須是在最後一個參數,例如
public static void test(String str,int num,Object... args){ //... }不能這樣寫
public static void test(Object... args,String str,int num){ //... }這樣寫連 compile 都不會過
因為這樣的話,在呼叫時,JVM 就不知道哪些參數算是 args 參數內的,哪些又是另外的
當然上述的例子我們用想的的話,是可以知道怎麼分辦,但也許 Java 有實作上的困難,尤其是像這樣
public static void test(Object... args1,Object... args2){ //... }若呼叫時是這樣呼叫
Test.test("1","2","3");這樣就真的無法分辦哪個歸 args1,哪個又歸 args2 了
沒有留言:
張貼留言
廣告訊息會被我刪除