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”-这实际上是说,如果参数已经正确,则不会执行换行操作。

简而言之,通过示例: (S2I2可能是最有趣的版本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