一尘不染

Java varargs和“…”参数

java

考虑方法声明:

String.format(String, Object ...)

该Object …参数只是对Objects 数组的引用。有没有办法在引用实际Object数组时使用此方法?如果我将Object数组传递给…参数-结果参数值将是一个二维数组-因为an Object[]本身就是an Object:

Object[] params = ....; // Make the array (for example based on user-input)
String s = String.format("%S has %.2f euros", params);

因此,数组的第一个组件(String.format方法中使用了哪个)将是一个数组,他将生成:

[class.getName() + "@" + Integer.toHexString(hashCode())] 

然后由于数组大小为1而发生错误。

该大胆的顺序是真正的问题。
这是第二个问题:是否一个…数组/参数有名字吗?


阅读 281

收藏
2020-03-22

共1个答案

一尘不染

从varargs的文档中:

最终参数类型之后的三个句点表示最终参数可以作为数组或参数序列传递。

因此,你可以传递多个参数或一个数组。

以下工作正常:

class VarargTest {
  public static void main(String[] args) {
    Object[] params = {"x", 1.2345f};
    String s = String.format("%s is %.2f", params);
    System.out.println(s); // Output is: x is 1.23
  }
}
2020-03-22