如何为varargs添加参数?

Edu*_*rra 8 java variadic-functions

假设我有方法

void m1(Object... objs) {
   m2("added", objs);
}
Run Code Online (Sandbox Code Playgroud)

void m2(Object... objs) {
   for (Object o : objs) {
      // do something with Object o
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我打电话m1("a", "b"),我想m2看到3个对象的数组(字符串"添加","a"和"b").但是,m2只看到2个对象:字符串"已添加"和一个Object[]数组,其内部包含字符串"a"和"b".

我怎样才能获得所需的行为,也就是说,我只是在将它们转发给另一种方法之前将元素添加到varargs中?

ars*_*jii 8

你可以写一个像这样的方法:

public static Object[] merge(Object o, Object... arr) {
    Object[] newArray = new Object[arr.length + 1];
    newArray[0] = o;
    System.arraycopy(arr, 0, newArray, 1, arr.length);

    return newArray;
}
Run Code Online (Sandbox Code Playgroud)

然后:

m2(merge("added", objs));
Run Code Online (Sandbox Code Playgroud)


Sot*_*lis 5

使用List,添加新元素,添加varagrs数组中的元素,然后将其转换List回数组。

void m1(Object... objs) {
    List<Object> list = new ArrayList<>();
    list.add("added");
    list.addAll(Arrays.asList(objs));
    m2(list.toArray());
}
Run Code Online (Sandbox Code Playgroud)

有了,LinkedList您可以打电话addFirst()

  • 好的解决方案,但是却破坏了他最初指定的顺序。`list.add(“ added”);`应该位于`list.addAll(...)`之前 (3认同)