Java 如何称呼“a”;“瓦拉格”;具有参数数组的方法?
我正在尝试调用Java 如何称呼“a”;“瓦拉格”;具有参数数组的方法?,java,variadic-functions,Java,Variadic Functions,我正在尝试调用String.format()具有String和Object[]。我该怎么做呢?简单地说: String.format(myString, myArray); 你应该可以打个电话 String text = String.format(formatString, args); 。。。假设希望args为多个值。如果您需要额外包装,您必须自己完成: String text = String.format(formatString, new Object[] { args });
String.format()
具有String
和Object[]
。我该怎么做呢?简单地说:
String.format(myString, myArray);
你应该可以打个电话
String text = String.format(formatString, args);
。。。假设希望args
为多个值。如果您需要额外包装,您必须自己完成:
String text = String.format(formatString, new Object[] { args });
基本上,如果参数类型已经与参数数组类型匹配,编译器不会进行任何包装
从JLS第节:
如果使用kn实际参数表达式调用m,或者如果使用k=n实际参数表达式调用m,并且第k个参数表达式的类型与T[]的赋值不兼容,则参数列表(e1,…,en-1,en,…,ek)的计算方式与写入(e1,…,en-1,new T[]{en,…,ek})的方式相同
请注意开头的“If”-这实际上是说,如果参数已经正确,则不会执行换行操作。简而言之,通过示例:
(S2和I2可能是最有趣的版本将varargs作为对象[]
传递)
产出:
## Strings:
S1: pass as single objects: a, b
S2: pass as varargs objects: a, b
S3: pass as single objects: [Ljava.lang.String;@ad02649, c
S4: pass as single objects: [Ljava.lang.String;@ad02649, c
## int:
I1: pass as single objects: 1, 2
I2: pass as varargs objects: 1, 2
I3: pass as single objects: [I@6781882a, 3
I4: pass as single objects: [I@6781882a, 3
你到底是怎么“尝试”的?发生了什么?对于Java1.8中的其他vararg方法,这似乎不起作用。
## Strings:
S1: pass as single objects: a, b
S2: pass as varargs objects: a, b
S3: pass as single objects: [Ljava.lang.String;@ad02649, c
S4: pass as single objects: [Ljava.lang.String;@ad02649, c
## int:
I1: pass as single objects: 1, 2
I2: pass as varargs objects: 1, 2
I3: pass as single objects: [I@6781882a, 3
I4: pass as single objects: [I@6781882a, 3