2012-04-12 11 views
5

Poniższy kod wykorzystuje proste tablice ciągu w języku Java.Przekazywanie tablic jako parametrów metod w języku 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? 
    } 
} 

W powyższym fragmencie kodu możemy zainicjować takie tablice.

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

i możemy bezpośrednio przekazać ją do metody bez przypisywania w ten sposób.

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

Jeśli tak, to poniższe oświadczenie również powinno być ważne.

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

ale kompilator narzeka: "Nielegalny początek wyrażenia nie jest stwierdzeniem" Dlaczego?

+0

Chyba jakoś trzeba przekazać odniesienie do tablicy ciągów. Przez to, co robisz, tak się nie dzieje. – noMAD

+1

Może być trudno poprawnie parsować w żądanej formie, na przykład, jeśli kompilator widzi '{1, 12, 57}', co powinno być - 'bajt []', 'short []', ' int [] 'lub' long [] '? Przy wyraźnym typie nie ma już dwuznaczności. – trutheality

Odpowiedz

8

Według specyfikacji język Java (10.6. Array Initializers)

inicjator tablica może być określony w zgłoszeniu, lub jako część wyrażenia tworzenia tablicy (§15.10), tworząc tablicę i zapewniające pewne początkowe wartości:

Tak, istnieją tylko dwa sposoby, można użyć inicjator array ({"foo", "bar"}):

  1. Deklaracja zmiennej: tworzenie wyrażenie String[] foo = {"foo", "bar"};
  2. Array: new String[] {"foo", "bar"};

Nie można używać inicjatora tablicy jako parametr metody.

15.10. Array Creation Expressions

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

Nie masz na myśli "nie możesz go użyć tylko ...", prawda? –

+1

W tym zdaniu 'Tak, możesz użyć go tylko jako części wyrażenia tworzenia tablicy' czy mogę powiedzieć, że odnosisz się do 'it' jako? – noMAD

+0

@userunknown, tylko literówka, dziękuje –

Powiązane problemy