java - uso - Cómo llamar a un método varargs con un argumento adicional de un método varargs
uso de argumentos en java (4)
Ahora solo veo una forma: crear una matriz con dimensión [args] + 1 y copiar todos los elementos en una nueva matriz.
No hay forma más sencilla. myobj
crear una nueva matriz e incluir myobj
como último elemento de la matriz.
String[] args2 = Arrays.copyOf(args, args.length + 1);
args2[args2.length-1] = myobj;
sys(args2);
Si por casualidad dependes de Apache Commons Lang puedes hacerlo
sys(ArrayUtils.add(args, myobj));
o guayaba
sys(ObjectArrays.concat(args, myobj));
Tengo algunas funciones del sistema varargs, donde T es un tipo real, como String
:
sys(T... args)
Quiero crear una función propia, que delegue en la función del sistema. Mi función es también una función de varargs. Quiero pasar a través de todos los argumentos de mi función a la función del sistema, además de un argumento final adicional. Algo como esto:
myfunc(T... args) {
T myobj = new T();
sys(args, myobj); // <- of course, here error.
}
¿Cómo necesito cambiar la línea con el error? Ahora solo veo una forma: crear una matriz con dimensión [args] + 1 y copiar todos los elementos en la nueva matriz. Pero tal vez exista una forma más sencilla?
Puede llamar a sys()
dos veces si a la orden no le importa:
T myobj=new T();
sys(myobj);
sys(args);
Si no puede usar esto, cambie a colecciones (por ejemplo, LinkedList) para todas sus funciones.
Si puedes usar Guava , entonces puedes hacer:
sys(ObjectArrays.concat(myobj, args))
Solución de Java 8:
sys(Stream.concat(Arrays.stream(args), Stream.of(myobj)).toArray(T[]::new));