Java 如何向varargs添加参数?
假设我有办法Java 如何向varargs添加参数?,java,variadic-functions,Java,Variadic Functions,假设我有办法 void m1(Object... objs) { m2("added", objs); } 及 如果我调用m1(“a”、“b”),我希望m2看到一个由3个对象组成的数组(字符串“添加”、“a”和“b”)。但是,m2只看到两个对象:字符串“added”和Object[]数组,数组内部包含字符串“a”和“b” 如何获得所需的行为,即在将元素转发到另一个方法之前向varargs添加元素?使用列表,添加新元素,从varagrs数组添加元素,然后将列表转换回数组 void m1(O
void m1(Object... objs) {
m2("added", objs);
}
及
如果我调用m1(“a”、“b”)
,我希望m2
看到一个由3个对象组成的数组(字符串“添加”、“a”和“b”)。但是,m2
只看到两个对象:字符串“added”和Object[]
数组,数组内部包含字符串“a”和“b”
如何获得所需的行为,即在将元素转发到另一个方法之前向varargs添加元素?使用
列表
,添加新元素,从varagrs数组添加元素,然后将列表
转换回数组
void m1(Object... objs) {
List<Object> list = new ArrayList<>();
list.add("added");
list.addAll(Arrays.asList(objs));
m2(list.toArray());
}
void m1(对象…对象){
列表=新的ArrayList();
列表。添加(“添加”);
addAll(Arrays.asList(objs));
m2(list.toArray());
}
使用
LinkedList
可以调用addFirst()
您可以编写如下方法:
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;
}
随后:
m2(merge("added", objs));
Varargs在功能上与传入数组相同,只是不要求用户构造数组。根据“最终参数可以作为数组或参数序列传递”(原始斜体)。因此,如果作为参数序列传递,则数组将从传入的变量参数构造 在您的情况下,您希望向该数组添加一些内容。。。因此,您必须创建一个新阵列:
void m1(Object... objs){
Object[] newObjs = new Object[objs.length + 1];
newObjs[0] = "added";
System.arraycopy(objs, 0, newObjs, 1, objs.length);
m2(newObjs);
}
有很多方法可以解决这个问题,但您的建议“在将元素转发到另一个方法之前,只需将元素添加到varargs中”是完全可以接受的。@JNL这不是重复的。基本上,直接使用数组进行操作。@RohitJain I从未说过这是重复的。我在帮OP问一个类似的问题。我认为这会有帮助。很好的解决方案,但是它打破了他最初指定的顺序<代码>列表。添加(“添加”)代码>应该放在列表的前面。addAll(…)@StormeHawke是的,谢谢。根据实施情况进行编辑。
void m1(Object... objs){
Object[] newObjs = new Object[objs.length + 1];
newObjs[0] = "added";
System.arraycopy(objs, 0, newObjs, 1, objs.length);
m2(newObjs);
}