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

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

 sys(T... args) 

我想创建自己的函数,它委托给系统函数。 我的function也是一个varargsfunction。 我想通过系统函数传递函数的所有参数,以及一个额外的尾随参数。 像这样的东西:

 myfunc(T... args) { T myobj = new T(); sys(args, myobj); // <- of course, here error. } 

如何更改错误行? 现在我只看到一种方法:创建维度为[args] + 1的数组,并将所有项目复制到新数组中。 但也许存在一种更简单的方法?

现在我只看到一种方法:创建维度[args] + 1的数组,并将所有项目复制到新数组。

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

 String[] args2 = Arrays.copyOf(args, args.length + 1); args2[args2.length-1] = myobj; sys(args2); 

如果您碰巧依赖Apache Commons Lang,您可以这样做

 sys(ArrayUtils.add(args, myobj)); 

或番石榴

 sys(ObjectArrays.concat(args, myobj)); 

如果订单不关心,您可以调用sys()两次:

 T myobj=new T(); sys(myobj); sys(args); 

如果您不能使用它,请切换到所有function的集合(例如LinkedList)。

如果你可以使用番石榴 ,那么你可以这样做:

 sys(ObjectArrays.concat(myobj, args)) 

Java 8解决方案:

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