Java,參數中有3個點

如下方法中的三個點是什麼意思? html

public void myMethod(String... strings){
    // method body
}

#1樓

能夠說,這是語法糖的一個例子,由於不管如何它都是做爲數組實現的(這並不意味着它沒有用)-我更喜歡傳遞數組以使其清晰,並聲明具備給定類型數組的方法。 不過,與其說是答案,不如說是一種意見。 java


#2樓

若是您來自該背景,只需將其視爲C#中的關鍵字params :) 數組


#3樓

該功能稱爲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的評論。 函數


#4樓

這意味着能夠將零個或多個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在他的評論中的澄清。


#5樓

這是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[]做爲參數。

相關文章
相關標籤/搜索