如下方法中的三個點是什麼意思? html
public void myMethod(String... strings){ // method body }
能夠說,這是語法糖的一個例子,由於不管如何它都是做爲數組實現的(這並不意味着它沒有用)-我更喜歡傳遞數組以使其清晰,並聲明具備給定類型數組的方法。 不過,與其說是答案,不如說是一種意見。 java
若是您來自該背景,只需將其視爲C#中的關鍵字params
:) 數組
該功能稱爲varargs ,它是Java 5中引入的功能。這意味着該函數能夠接收多個String
參數: 安全
myMethod("foo", "bar"); myMethod("foo", "bar", "baz"); myMethod(new String[]{"foo", "var", "baz"}); // you can even pass an array
而後,您能夠將String
var用做數組: less
public void myMethod(String... strings){ for(String whatever : strings){ // do what ever you want } // the code above is is equivalent to for( int i = 0; i < strings.length; i++){ // classical for. In this case you use strings[i] } }
這個答案很大程度上取材於kiswa和Lorenzo的觀點...以及Graphain的評論。 函數
這意味着能夠將零個或多個String對象(或它們的數組)做爲該方法的參數傳遞。 ui
請參見此處的「任意數量的參數」部分: http : //java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs this
在您的示例中,您能夠將其稱爲如下任意一種: spa
myMethod(); // Likely useless, but possible myMethod("one", "two", "three"); myMethod("solo"); myMethod(new String[]{"a", "b", "c"});
重要說明:以這種方式傳遞的參數始終是一個數組-即便只有一個。 確保在方法主體中以這種方式對待它。 code
重要說明2:獲取...
的參數必須是方法簽名中的最後一個。 所以, myMethod(int i, String... strings)
能夠,可是myMethod(String... strings, int i)
則能夠。
感謝Vash在他的評論中的澄清。
這是Java傳遞varargs (可變數字參數)的方法。
若是您熟悉C,則相似於printf
函數使用的...
語法:
int printf(const char * format, ...);
可是以一種類型安全的方式:每一個參數都必須符合指定的類型(在您的示例中,它們都應爲String
)。
這是有關如何使用varargs的簡單示例:
class VarargSample { public static void PrintMultipleStrings(String... strings) { for( String s : strings ) { System.out.println(s); } } public static void main(String[] args) { PrintMultipleStrings("Hello", "world"); } }
...
參數其實是一個數組,所以您能夠傳遞String[]
做爲參數。