I have some varargs system function, where T is some actual type, like String
:
sys(T... args)
I want to create own function, which delegates to the system function. My function is also a varargs function. I want to pass through all the arguments for my function through to the system function, plus an additional trailing argument. Something like this:
myfunc(T... args) {
T myobj = new T();
sys(args, myobj); // <- of course, here error.
}
How do I need to change the line with the error?
Now I see only one way: create array with dimension [args] + 1 and copy all items to the new array.
But maybe there exists a more simple way?
Now I see only one way: create array with dimension [args] + 1 and copy all items to new array.
There is no simpler way. You need to create a new array and include myobj
as last element of the array.
String[] args2 = Arrays.copyOf(args, args.length + 1);
args2[args2.length-1] = myobj;
sys(args2);
If you happen to depend on Apache Commons Lang you can do
sys(ArrayUtils.add(args, myobj));
or Guava
sys(ObjectArrays.concat(args, myobj));
You may call sys()
twice if the order doesn't care:
T myobj=new T();
sys(myobj);
sys(args);
If you can't use this, switch to collections (eg. LinkedList) for all of your functions.
If you can use Guava, then you can do:
sys(ObjectArrays.concat(myobj, args))
Java 8 solution:
sys(Stream.concat(Arrays.stream(args), Stream.of(myobj)).toArray(T[]::new));