我想知道是否可以在接受 vargs 的方法调用上将 Object 数组解压缩到单独的 Object 中。这个问题与这个问题类似。
我有一个像这样的代码:
public class Test {
public static Object doWork(Object... objects){
System.out.println(objects.length);
return objects;
}
public static void main(String[] args){
Object res = doWork("one", "two");
res = doWork("three", res);
}
}
我想res
在第二次调用中解压对象,以便它接收一个长度为 3 的对象数组,而不是现在的长度 2(其中第二个位置是长度为 2 的对象数组,然后具有所有三个参数)。
在Java中甚至可能吗?
更详细:
通过做
Object res = doWork("one", "two");
res = doWork("three", res);
第二个电话被称为:
doWork( Object[ "three", Object[ "one", "two" ] ] )
我想在哪里:
doWork(Object[ "one", "two", "three" ] )
我知道这可以通过执行以下操作来实现:
public static void main(String[] args){
res = doWork("one", "two");
List<Object> los = Arrays.asList(res);
los = new ArrayList<>(los); // Can't modify an underlying array
los.add("three");
res = doWork(los.toArray());
}
但我正在寻找类似unpack
Lua 内置函数或前面提到的 SO 问题中描述的 Python 方式的东西。
@chancea 和 @Cyrille-ka 给出的两个答案都很好,也解决了问题。可能需要考虑的一个好主意是方法的签名是否可以修改。@cyrille-ka 的答案尊重函数的签名,而 @chancea 没有。但是我认为在大多数情况下,一个简单的包装函数可以写到另一个,所以这不应该是一个问题。另一方面,@chancea 的方式在编程时可能更容易使用(不会出现忘记调用 unpack 函数的错误)。