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中?
你可以写一个像这样的方法:
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)
使用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()。
| 归档时间: |
|
| 查看次数: |
3404 次 |
| 最近记录: |