所以我一直試圖弄清楚Java中的String...
這一點。據我所知,它與String []大致相同,但在這裏或Google上我找不到任何有關它的信息。「String ...」的正確用法是什麼
有人可以告訴我它是什麼以及這樣的東西的正確用法? (可以說我有帶參數的方法myMethod(String... args) { ... }
謝謝!
所以我一直試圖弄清楚Java中的String...
這一點。據我所知,它與String []大致相同,但在這裏或Google上我找不到任何有關它的信息。「String ...」的正確用法是什麼
有人可以告訴我它是什麼以及這樣的東西的正確用法? (可以說我有帶參數的方法myMethod(String... args) { ... }
謝謝!
就語言類型而言,此語法確實與String[]
完全相同。然而,它允許呼叫者通過指定可變數量的參數String
隱式構造的數組:
myMethod("a", "b", "c");
myMethod(); // Empty array is also allowed
myMethod("a", "b");
一個限制對這個語法,象這樣的參數可以在該方法的參數列表的末尾纔會出現。
這是否意味着它可以轉換爲String []對象? –
@ IAreKyleW00t。它被轉換爲'String []'。 –
@ IAreKyleW00t絕對:這是一個編譯時的特性,在運行時該類與'myMethod(String [])'類相同,調用將與'myMethod(new String [] {「a」 「b」,「c」})'。 – dasblinkenlight
這意味着myMethod
接受零個或多個String
參數。見here,例如,在Java Language Specification,這就是所謂的可變參數數量參數:
方法或構造的最後形式參數是特殊的:它可以是可變參數元數,由以下類型的省略號指示
如果最後一個形式參數是變量arity參數,則該方法是一個變量arity方法。否則,它是一種固定的方法。
JLS還在gruesome detail中描述了在存在可變參數時如何匹配方法簽名。
...
表示該方法支持變量即變量(數量)自變量。
所以,你可以打電話給你的myMethod()
作爲
myMethod(); // or
myMethod(str1); // or
myMethod(str1, str2); // and so on
使用相同的方法簽名myMethod(String... str)
。當聲明一個具有多個參數的變量方法var-arg參數必須在所有其他常規方法參數之後成功。
在該方法內部,所有傳遞的參數都可以以與參數名稱相同的參考名稱作爲數組訪問。所以,你可以在這裏實際使用str.length
。
該功能非常靈活。你甚至可以通過一個String[]
它。但是,相反是不正確的。採用數組的方法不會接受單個字符串。
尋找「variadic java」。 –