2012-04-12 87 views
5

Đoạn mã sau sử dụng các mảng đơn giản của chuỗi trong Java.Truyền mảng dưới dạng tham số phương thức trong 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? 
    } 
} 

Trong đoạn mã trên, chúng tôi có thể khởi tạo các mảng như thế này.

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

và chúng tôi có thể chuyển trực tiếp đến phương thức mà không được chỉ định như thế này.

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

Nếu đúng như vậy thì tuyên bố sau cũng phải hợp lệ.

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

nhưng trình biên dịch than phiền "Bắt đầu biểu thức bất hợp pháp không phải là tuyên bố" Tại sao?

+0

Tôi đoán bạn bằng cách nào đó cần phải vượt qua tham chiếu của mảng chuỗi. Bởi những gì bạn đang làm, điều đó không xảy ra. – noMAD

+1

Có thể khó phân tích chính xác trong biểu mẫu bạn muốn, ví dụ nếu trình biên dịch thấy '{1, 12, 57}', thì nó sẽ là gì - một 'byte []', 'short []', ' int [] ', hoặc' long [] '? Với loại rõ ràng, sự mơ hồ đã biến mất. – trutheality

Trả lời

8

Theo Java Language Specification (10.6. Array Initializers)

Một initializer mảng có thể được quy định trong một tuyên bố, hoặc là một phần của một biểu thức tạo mảng (§15.10), tạo ra một mảng và cung cấp một số giá trị ban đầu:

Vì vậy, chỉ có hai cách để bạn có thể sử dụng một initializer mảng ({"foo", "bar"}):

  1. Khai báo biến: String[] foo = {"foo", "bar"};
  2. Mảng tạo biểu: new String[] {"foo", "bar"};

Bạn không thể sử dụng một initializer mảng như một tham số phương pháp.

15.10. Array Creation Expressions

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

Bạn không có nghĩa là 'không thể sử dụng nó chỉ ... ', bạn có? –

+1

Trong câu này 'Vì vậy, bạn có thể sử dụng nó chỉ như là một phần của biểu thức tạo mảng' tôi có thể biết bạn đang đề cập đến' nó' như là? – noMAD

+0

@userunknown, chỉ là lỗi đánh máy, cảm ơn –

Các vấn đề liên quan