2010-12-14 24 views
13

¿Cómo es que la primera llamada a someMethod no se compila sin ser explícita que es String []?Inicialización de la matriz Java dentro de la lista de argumentos

Está bien utilizar un inicializador de matriz para crear una matriz String [] pero no puede usarla para pasar un argumento. ¿Las llaves se usan de alguna otra manera para pasar argumentos que descarrilan cómo espero que se comporte?

public void someMethod(String[] arr){ 
    //do some magic 
} 

public void makeSomeMagic(){ 

    String[] arr = {"cat", "fish", "cow"}; 

    //Does not compile! 
    someMethod({"cat", "fish", "cow"}); 

    //This compiles! 
    someMethod(new String[]{"cat", "fish", "cow"}); 

    //This compiles! 
    someMethod(arr); 
} 

El error del compilador es el siguiente:

El algunMetodo (String []) en el tipo MOO no es aplicable a los argumentos (String, String, String)

+1

Solo está permitido en el momento de la declaración. Es una cosa de sintaxis –

Respuesta

12

Sólo puede utilice la notación de inicialización { "hello", "world" } al declarar una variable de matriz o en una expresión de creación de matriz como new String[] { ... }.

Ver Section 10.6 Array Initializers en la Especificación del Lenguaje Java:

un inicializador array puede especificarse en una declaración, o como parte de una expresión de creación de matriz (§15.10), creando una matriz y proporcionar algunos valores iniciales

5

Si no desea utilizar explícita String[], utilice:

public void someMethod(String... arr){ 
    //do some magic 
} 
… 
someMethod("cm", "applicant", "lead"); 

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

Read more.

+3

Eso solo funcionará si cambia la firma a 'String ... args'. – aioobe

+0

@aioobe Gracias. He actualizado mi respuesta. – 0x2D9A3

+0

Perfecto, esto me da exactamente lo que estaba buscando. ¡Gracias! –

1

o puede utilizar varargs:

public void someMethod(String... arr){ 
    //do some magic 
} 

public void makeSomeMagic(){ 
    someMethod("cat", "fish", "cow"); 
} 

Se trata básicamente de una sintaxis de lujo para un parámetro de matriz (vararg deben ser el último parámetro en la firma del método).

0

Puede usar las llaves para inicializar una matriz. En cualquier otro caso, se usa para definir bloques de declaraciones.

Cuestiones relacionadas