Just Do:
new SequenceEntityModifier(arr.toArray(new IEntityModifier[arr.size()]));
Esto copia el ArrayList
a la matriz dada y lo devuelve. Todas las funciones vararg también pueden hacer arreglos para el argumento, por lo que para:
public void doSomething(Object... objs)
todas las llamadas legales son:
doSomething(); // Empty array
doSomething(obj1); // One element
doSomething(obj1, obj2); // Two elements
doSomething(new Object[] { obj1, obj2 }); // Two elements, but passed as array
Una advertencia:
Vararg llama a la participación de las matrices primitivas don' t funciona como cabría esperar Por ejemplo:
public static void doSomething(Object... objs) {
for (Object obj : objs) {
System.out.println(obj);
}
}
public static void main(String[] args) {
int[] intArray = {1, 2, 3};
doSomething(intArray);
}
Uno podría esperar que esto imprime 1
, 2
y 3
, en líneas separadas. En cambio, imprime algo así como [[email protected]
(el resultado predeterminado toString
para un int[]
). Esto se debe a que es en última instancia, la creación de un Object[]
con un elemento, que es nuestro int[]
, por ejemplo .:
// Basically what the code above was doing
Object[] objs = new Object[] { intArray };
Lo mismo va para double[]
, char[]
, y otros tipos de matrices primitivas. Tenga en cuenta que esto se puede solucionar simplemente cambiando el tipo de intArray
a Integer[]
. Esto puede no ser simple si está trabajando con una matriz existente, ya que no puede convertir int[]
directamente en Integer[]
(vea this question, estoy particularmente interesado en los métodos ArrayUtils.toObject
de Apache Commons Lang).
Correcto, pero cada vez que escribo algo así me encoge: un enredo tan sintáctico. –
perfecto, muchas gracias! – pad
@SteveB.Estoy de acuerdo, la sobrecarga es una opción mucho mejor que forzar este tipo de llamada de método, luego convertir detrás de escena. Aunque los varargs son agradables, no juegan bien con las colecciones. – Brian