2010-12-14 115 views
29

在Java中,這是完全合法的通過以下方式初始化字符串數組:String數組初始化爲構造函數的參數

String[] s = {"FOO", "BAR"}; 

然而,試圖實例化一個類,需要一個String數組作爲參數時,下面這段代碼是不允許的:

Test t = new Test({"test"}); 

但是這部作品再次:

Test t = new Test(new String[] {"test"}); 

有人可以解釋爲什麼這是?

回答

43
String[] s = {"FOO", "BAR"}; 

這個在聲明時只允許

你不能

String[] s; 
s={"FOO", "BAR"}; 
5

因爲Type[] x = { ... }是數組的初始化語法{ ... }僅在特定的上下文中以特定方式解釋。

3

對於你想要一個簡單的方式來傳遞一個String數組,我建議你使用可變參數

class Test { 
    public Test(String...args); 
} 

// same as new Test(new String[] { "test", "one" }) 
Test t = new Test("test", "one"); 
+0

謝謝,但這並不是真正的問題,你也假設我們可以通過修改構造函數。 – 2010-12-14 09:49:31

+1

@Herminator通常你可以,但不總是。下一次你可以知道你能做什麼。 – 2010-12-14 10:14:28