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

Yur*_*rev 16 java delegates variadic-functions

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

sys(T... args)
Run Code Online (Sandbox Code Playgroud)

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

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

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

aio*_*obe 8

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

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

String[] args2 = Arrays.copyOf(args, args.length + 1);
args2[args2.length-1] = myobj;
sys(args2);
Run Code Online (Sandbox Code Playgroud)

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

sys(ArrayUtils.add(args, myobj));
Run Code Online (Sandbox Code Playgroud)

或番石榴

sys(ObjectArrays.concat(args, myobj));
Run Code Online (Sandbox Code Playgroud)


bru*_*del 6

sys()如果订单不关心,您可以拨打两次电话:

T myobj=new T();
sys(myobj);
sys(args);
Run Code Online (Sandbox Code Playgroud)

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