asumir un método con la siguiente firma:¿Cómo paso una ArrayList a un método que espera un vararg (Object ...)?
public static void foo(String arg1, String args2, Object... moreArgs);
Cuando se ejecuta ...
ClassName.foo("something", "something", "first", "second", "third");
... Voy a moreArgs[0] == "first"
, moreArgs[1] == "second"
y moreArgs[2] == "third"
.
Pero supongamos que tengo los parámetros almacenados en un ArrayList<String>
llamado arrayList
que contiene "primero", "segundo" y "tercero".
Quiero llamar foo
modo que moreArgs[0] == "first"
, moreArgs[1] == "second"
y moreArgs[2] == "third"
utilizando el arrayList
como parámetro.
Mi intento ingenuo era ...
ClassName.foo("something", "something", arrayList);
... pero eso me dará moreArgs[0] == arrayList
que no es lo que quería.
¿Cuál es la forma correcta de pasar arrayList
con el método anterior para que foo
moreArgs[0] == "first"
, moreArgs[1] == "second"
y moreArgs[2] == "third"
?
Tenga en cuenta que el número de argumentos en arrayList
es tres en este caso específico, pero la solución que estoy buscando debe ser general y funcionar para cualquier número de argumentos en arrayList
.
¡Oh, así de simple! ¡Pensé que Object ...! = Object []. ¡Gracias! :-) – knorv
En general Object! = Object [], pero para los métodos varargs, el compilador convierte un parámetro MyType ... en un parámetro MyType [], y envuelve todos los argumentos en una matriz en tiempo de ejecución que pasa a la función. Entonces, en este caso, puede aprovechar la firma interna secreta del método varargs al pasar explícitamente una referencia de matriz. –