2010-12-14 23 views
13

如果第一次調用someMethod時未明確表示它是String [],那麼該如何進行編譯?參數列表中的Java數組初始化

使用數組初始值設定項可以創建一個String []數組,但不能用它來傳遞參數。是否以其他方式使用花括號來傳遞參數,這些參數會影響我的預期行爲?

public void someMethod(String[] arr){ 
    //do some magic 
} 

public void makeSomeMagic(){ 

    String[] arr = {"cat", "fish", "cow"}; 

    //Does not compile! 
    someMethod({"cat", "fish", "cow"}); 

    //This compiles! 
    someMethod(new String[]{"cat", "fish", "cow"}); 

    //This compiles! 
    someMethod(arr); 
} 

編譯器錯誤是:

的方法,在所述類型的someMethod(字符串[])武不適用於參數(字符串,字符串,字符串)

+1

它只允許在聲明時間。這是一個語法的東西 – 2010-12-14 20:31:51

回答

12

您只能在聲明數組變量時或在數組創建表達式(如new String[] { ... })中使用{ "hello", "world" }初始化符號。

參見Section 10.6 Array Initializers在Java語言規範:

數組初始化可在聲明中指定,或作爲陣列創建表達式(§15.10)的一部分,形成一個陣列,並提供一些初始值

5

如果你不想使用顯式String[],用途:

public void someMethod(String... arr){ 
    //do some magic 
} 
… 
someMethod("cm", "applicant", "lead"); 

最後一個參數類型後面的三個週期表示最後一個參數可以作爲數組或參數序列傳遞。

Read more

+3

這隻有在他將簽名更改爲'String ... args'時纔有效。 – aioobe 2010-12-14 20:34:18

+0

@aioobe謝謝。我已經更新了我的答案。 – 0x2D9A3 2010-12-14 20:41:36

+0

完美,這給了我正是我想要的。謝謝! – 2010-12-14 20:52:58

1

或者你可以使用可變參數:

public void someMethod(String... arr){ 
    //do some magic 
} 

public void makeSomeMagic(){ 
    someMethod("cat", "fish", "cow"); 
} 

它基本上是一個數組參數看上語法(可變參數必須在方法簽名的最後一個參數)。

0

您可以使用大括號來初始化數組。在其他情況下,它用於定義統計塊。