considerar las siguientes firmas de método:arrays de objeto en firmas de método
public fooMethod (Foo[] foos) { /*...*/ }
y
public fooMethod (Foo... foos) { /*...*/ }
Explicación: El primero tiene una matriz de Foo-objetos como un argumento - fooMethod(new Foo[]{..})
- mientras que el segundo toma una cantidad arbitraria de argumentos de tipo Foo, y los presenta como una matriz de Foo: s dentro del método - fooMethod(fooObject1, fooObject2, etc...
).
Java arroja un ajuste si ambos están definidos, alegando que son métodos duplicados. Hice un trabajo de detective y descubrí que la primera declaración realmente requiere una matriz explícita de objetos Foo, y esa es la única forma de llamar a ese método. La segunda forma realmente acepta tanto una cantidad arbitraria de argumentos Foo como también acepta una matriz de objetos Foo.
Entonces, la pregunta es, dado que este último método parece ser más flexible, ¿hay alguna razón para usar el primer ejemplo o me he perdido algo vital?
Sin saber Java, esta es una puñalada en la oscuridad, pero supongo que la primera es marginalmente más eficiente, porque: a) es probable que solo esté pasando un solo puntero, yb) estará pasando un puntero a una porción contigua de la memoria. –
@monoxide: No, ambos formularios generan bytecode de llamada equivalente, ambos formularios requieren construir una matriz para aprobar. –
La segunda forma es simplemente azúcar sintáctica para el primero. Entonces, fooMethod (nuevo Foo (1), nuevo Foo (2)) es aquí idéntico a fooMethod (nuevo Foo [] {nuevo Foo (1), nuevo Foo (2)}) –