2016-01-18 105 views
1

是否可以將動態數量的參數傳遞給Formatter.format()函數?我想將字符串數組中的所有字符串傳遞給format()函數。
像這樣,Java - 將動態數量的參數傳遞給Formatter.format()函數

Formatter format; 
format.format("FormatString" , "someString" , arrayOfString[0] , arrayOfString[1] , ... , arrayOfString[n] , "anotherString"); 
+0

「我想以字符串數組中的所有字符串的形式傳遞」你試過了嗎?它是如何去的? – Pshemo

+0

如果array是可能的最後一個參數。但不可能在代碼中提到的東西。 – Dinushan

+0

從我記得它更像是「如果數組只是參數(格式旁邊)」,那麼它是可能的。如果所有元素都是String類型,那麼可以將它們包裝在數組中並傳遞它,如果其中一些元素可以是其他類型的使用Object數組。 – Pshemo

回答

1

動態參數是基本上語法糖用於傳遞參數數組的函數的形式。在內部,動態參數是一個數組。

public Formatter format(String format, Object ... args) 

是基本相同

public Formatter format(String format, Object[] args) 

除了在前一種情況下,你不必建造手工陣列,編譯器會爲你做它。但仍然可以傳遞一組參數,就好像該方法是用後一種語法編寫的一樣。只需使用數組流

String[] arrayOfString; 

Object[] arguments = new Object[arrayOfString.length + 2]; 
int argIndex = 0; 
arguments[argIndex++] = "someString"; 
for (int i = 0; i < arrayOfString.length; i++) { 
    arguments[argIndex++] = arrayOfString[i]; 
} 
arguments[argIndex++] = "anotherString"; 

Formatter formatter = new Formatter(); 
formatter.format("FormatString", arguments); 
0

你可以逃脫這樣的::

所以,你可以建立自己的動態參數數組包含所有你想要傳遞參數

Formatter formatter = new Formatter(); 
formatter.format(formatString, Arrays.stream(new Object[][]{array1, array2}) 
    .flatMap(Arrays::stream).toArray()); 
相關問題