2010-11-06 5 views

Respuesta

8

Desde el docs:

Los tres períodos después de la final tipo del parámetro indican que la último argumento se puede hacer pasar como un array o como una secuencia de argumentos.

No se puede pasar un argumento y una matriz.

+2

Y es bueno que no puedas. Desde Java5, las reglas para resolver métodos ya se han vuelto demasiado complicadas cuando entran en juego el autoboxing, varargs y arrays. – Thilo

2

Eso es porque, de hecho, intenta pasar una matriz que contiene cadena y otra matriz.

0

Porque no es lo mismo. Simplemente no puedes mezclar y combinar así. La única válida en el ejemplo sería trabajar con una firma función como esta:

public void foo(String head, String ... tail) 
0

Este método

public void foo(String... params); 

es sólo una versión conveniencia de éste:

public void foo(String[] params); 

y por lo tanto puede llamarlo con un número variable de Cadenas (que el compilador convertirá en una matriz de Cadenas) o una matriz de Cadenas, pero una combinación no funcionará, por diseño.

0

Piénsalo. ¿Y si tuviera un método como este:

public void foo(Object... objects); 

y trató de llamarlo así:

foo("bar", new Object[] { "baz" }); 

caso de que el Object[] en la segunda posición de ser tratados como un solo Object en la llamada varargs o debería ser "expandido"? Esto llevaría a un comportamiento muy confuso.

Cuestiones relacionadas