ultimo obtener objetos metodos llenar imprimir elemento como clase java collections andengine variadic-functions

java - obtener - Cómo pasar elementos de un arrayList a una función variadica



obtener el ultimo elemento de un arraylist java (3)

Tengo una lista de arreglos llena de elementos. Me gustaría pasar los elementos de esa lista de matriz como argumentos a una función variadica.

Mi función

public SequenceEntityModifier(final IEntityModifier... pEntityModifiers)

My ArrayList

ArrayList<IEntityModifier> arr = new ArrayList<IEntityModifier>(); arr.add(new MoveXModifier(1, 50, 120)); arr.add(new MoveXModifier(1, 120, 50));

Me gustaría pasarlo a la función como si quisiera pasarlos individualmente.

new SequenceEntityModifier( /* elements of arr here */ );

Es algo como esto posible?

Gracias por adelantado.


La construcción IEntityModifier... es azúcar sintáctica para IEntityModifier[]

Consulte la sección JLS apropiada ( 8.4.1 Parámetros formales )


Siempre creo una sobrecarga que toma Iterable< ? extends IEntityModifier > Iterable< ? extends IEntityModifier > y hace que la versión variadica avance a esta usando Arrays.asList() , que es barata.


Solo haz:

new SequenceEntityModifier(arr.toArray(new IEntityModifier[arr.size()]));

Esto copia ArrayList a la matriz dada y lo devuelve. Todas las funciones vararg también pueden tomar matrices 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:

Las llamadas Vararg que involucran matrices primitivas no funcionan 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 imprima 1 , 2 y 3 en líneas separadas. En cambio, imprime algo así como [I@1242719c (el resultado predeterminado de toString para un int[] ). Esto se debe a que finalmente está creando 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 ocurre con double[] , char[] y otros tipos de matriz primitiva. 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 una int[] directamente en un Integer[] (vea esta pregunta , me gustan especialmente los métodos ArrayUtils.toObject de Apache Commons Lang ).