2016-01-18 80 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()); 
相关问题