2009-10-30 110 views
1

有人能告訴我一個實用的...數組方法的解釋嗎? 它只是一種聲明可選參數而不是傳遞空值的方法嗎?public void add(int a,int ... b){

public void add(int a, int... b) { 
// do something 
} 

add(1); 
add(1,2,3); 
+8

是不是你的例已被實際使用? – Joey 2009-10-30 14:46:52

回答

3

這是一個簡寫爲你當你寫,將使用可採取數組作爲參數的函數代碼。

一般來說寫add(1,2,3,4);比寫add(new int[] {1,2,3,4});容易,對吧?它在未來的程序員需要閱讀和維護時也更加清晰。

想想這樣:你會調用哪個函數,每次需要創建一個數組的那個函數,還是隻需要傳入儘可能多的參數的函數?

+0

沒有公平的打我一個簡單的Java問題!現在我必須去打敗你一個簡單的正則表達式問題。 – 2009-10-30 14:50:59

+0

@mmyers:我來爲你的名聲。 – Welbog 2009-10-30 14:51:47

+0

我的聲望消失了,我剩下的就是我的......不,等等。 – 2009-10-30 14:53:50

3

Formatter類是這樣的實際使用:

Formatter formatter = new Formatter(sb, Locale.US); 
formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d") 

的參數的任意數量可以被傳遞到使用所述第一參數,該參數是格式字符串本身進行格式化。

0

從你們派生例如你可以把一個方法有你傳遞給方法的所有整數的總和:

public int sum(int a, int... b) { 
    int sum = a; 
    for (int i : b) { 
     sum += i; 
    } 
    return sum; 
} 
11

String.format是一個相當不錯的實際例子。該方法不知道在格式字符串中將出現多少格式化程序,因此它接受可變數量的參數,並且格式化程序(在格式字符串中)應該與傳入方法的對象進行一對一映射。

這不是一種聲明選項參數而不是null的方法,因爲它是聲明一個可以處理多個參數的方法。立足我的榜樣關閉礦井,你可以寫一個sum方法採用可變數量的參數,總結它們放在一起:

public int sum(int... ns) 
{ 
    int sum = 0; 
    for (int n : ns) { 
     sum += n; 
    } 
    return sum; 
} 

這樣的話,你可以通過在2,3,4,甚至100個號碼根據您當時的需要進行總結。

+2

甚至爲零,如果您以編程方式調用該方法,這比您可能認爲的更有用,並且無需特殊處理沒有輸入的情況。 – 2009-10-30 17:17:35

0

在使用任意數量的值需要創建數組的方法之前,可以在調用方法之前將值放入數組。這裏的例子是將MessageFormat類如何格式化以前看的消息:

Object[] arguments = { 
    new Integer(7), 
    new Date(), 
    "a disturbance in the Force" 
}; 

String result = MessageFormat.format(
    "At {1,time} on {1,date}, there was {2} on planet " 
    + "{0,number,integer}.", arguments); 

它仍然是真實的多參數必須在陣列中已過,但可變參數功能自動化和隱藏的進程。此外,它與預先存在的API向上兼容。因此,例如,該方法MessageFormat.format現在有這樣的聲明:

public static String format(String pattern, 
          Object... arguments); 

最終參數的類型後的三個時期表明最後一個參數可以作爲陣列或者作爲參數的序列進行傳遞。可變參數只能在最後的參數位置使用。

String result = MessageFormat.format(
    "At {1,time} on {1,date}, there was {2} on planet " 
    + "{0,number,integer}.", 
    7, new Date(), "a disturbance in the Force"); 

所以,當你應該使用可變參數:鑑於新的可變參數聲明MessageFormat.format,上面的調用可以通過以下短,甜調用被取代?作爲客戶,只要API提供它們,您就應該利用它們。核心API的重要用途包括反射,消息格式化和新的printf工具。作爲一名API設計師,只有在真正引人注目的好處時,才應該謹慎使用它們。一般來說,您不應該重載可變參數方法,否則程序員很難確定哪個重載會被調用。

來源:http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

相關問題