Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用varargs方法中的附加参数调用varargs方法_Java_Delegates_Variadic Functions - Fatal编程技术网

Java 如何使用varargs方法中的附加参数调用varargs方法

Java 如何使用varargs方法中的附加参数调用varargs方法,java,delegates,variadic-functions,Java,Delegates,Variadic Functions,我有一些varargs系统函数,其中T是一些实际类型,比如String: sys(T... args) 我想创建自己的函数,它将委托给系统函数。我的函数也是一个varargs函数。我想将函数的所有参数传递给系统函数,再加上一个附加的尾随参数。大概是这样的: myfunc(T... args) { T myobj = new T(); sys(args, myobj); // <- of course, here error. } myfunc(T…args){ T my

我有一些varargs系统函数,其中T是一些实际类型,比如
String

sys(T... args)
我想创建自己的函数,它将委托给系统函数。我的函数也是一个varargs函数。我想将函数的所有参数传递给系统函数,再加上一个附加的尾随参数。大概是这样的:

myfunc(T... args) {
    T myobj = new T();
    sys(args, myobj); // <- of course, here error.
}
myfunc(T…args){
T myobj=新的T();
sys(args,myobj);//
现在我只看到一种方法:创建维度为[args]+1的数组,并将所有项复制到新数组中

没有更简单的方法。您需要创建一个新数组,并将
myobj
作为数组的最后一个元素

String[] args2 = Arrays.copyOf(args, args.length + 1);
args2[args2.length-1] = myobj;
sys(args2);
如果您碰巧依赖ApacheCommonsLang,您可以这样做

sys(ArrayUtils.add(args, myobj));
还是番石榴

sys(ObjectArrays.concat(args, myobj));
如果订单不关心,您可以调用两次
sys()

T myobj=new T();
sys(myobj);
sys(args);
如果无法使用此功能,请切换到所有功能的集合(如LinkedList)。

如果可以使用,则可以执行以下操作:

sys(ObjectArrays.concat(myobj, args))
Java 8解决方案:

sys(Stream.concat(Arrays.stream(args), Stream.of(myobj)).toArray(T[]::new));

@aioobe,实际对象类型,否则,如果我正确,我无法创建myobj。某些更改第一条消息这就是我询问的原因;-)我无法执行此调用,因为sys返回另一个对象作为结果,依赖于输入参数。例如:string.format()。然后您必须复制数组或为所有这些函数使用集合。然后您可以添加新项。@brummfondel,您是否建议他修改参数集合?这对调用方来说不是很礼貌(并且仅当参数是可变集合时才有效)@aioobe您可以实现函数的多个变体,一个带有varargs,一个带有List。最后,一个将调用另一个。但是您将拥有一个灵活的API。我认为这会使API变得混乱。请使用Apache Commons的库,或者让调用方处理它。