2012-04-12 19 views
5

El siguiente código usa matrices simples de String en Java.Pasar matrices como parámetros de método en Java

package javaarray; 

final public class Main 
{ 
    public void someMethod(String[] str) 
    { 
     System.out.println(str[0]+"\t"+str[1]); 
    } 
    public static void main(String[] args) 
    { 
     String[] str1 = new String[] {"day", "night"}; 
     String[] str2 = {"black", "white"}; 

     //Both of the above statements are valid. 

     Main main=new Main(); 
     main.someMethod(str1); 
     main.someMethod(str2); 

     //We can invoke the method someMethod by supplying both of the above arrays alternatively. 

     main.someMethod(new String[] { "day", "night" }); //This is also valid as obvious. 
     main.someMethod({ "black", "white" }); //This is however wrong. The compiler complains "Illegal start of expression not a statement" Why? 
    } 
} 

En el fragmento de código anterior, podemos inicializar matrices como esta.

String[] str1 = new String[] {"day", "night"}; 
String[] str2 = {"black", "white"}; 

y podemos pasar directamente a un método sin ser asignado como este.

main.someMethod(new String[] { "day", "night" }); 

Si es así, entonces la siguiente declaración también debería ser válida.

main.someMethod({ "black", "white" }); 

pero el compilador se queja de "Inicio ilegal de la expresión no es una afirmación" ¿Por qué?

+0

supongo que de alguna manera tiene que pasar la referencia de la matriz de cadenas. Por lo que estás haciendo, eso no sucede. – noMAD

+1

Puede ser difícil analizar correctamente en la forma que desee, por ejemplo, si el compilador ve '{1, 12, 57}', lo que debería ser - un 'byte []', 'short []', ' int [] ', o' long [] '? Con el tipo explícito, la ambigüedad se ha ido. – trutheality

Respuesta

8

Según Java Language Specification (10.6. Array Initializers)

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:

Por lo tanto, sólo hay dos maneras de utilizar un inicializador array ({"foo", "bar"}):

  1. declaración de variables: String[] foo = {"foo", "bar"};
  2. matriz de expresión de creación: new String[] {"foo", "bar"};

No puede utilizar un inicializador de matriz como un parámetro de método.

15.10. Array Creation Expressions

 
ArrayCreationExpression: 
    new PrimitiveType DimExprs Dimsopt 
    new ClassOrInterfaceType DimExprs Dimsopt 
    new PrimitiveType Dims ArrayInitializer 
    new ClassOrInterfaceType Dims ArrayInitializer 
+1

No quiere decir 'no puede usarlo solo ...', ¿verdad? –

+1

En esta oración 'Entonces, puede usarlo solo como parte de la expresión de creación de matriz' ¿puedo saber que se está refiriendo a' it' como? – noMAD

+0

@userunknown, solo un error tipográfico, gracias –

Cuestiones relacionadas