2011-10-29 42 views
8

Bạn có thể truyền mảng mới làm phương thức và vẫn có dữ liệu trong mảng đó không? Ví dụ: Tôi có phương thức này: foo(String[]) và tôi muốn gọi nó là số foo(new String[] s = {"String1", "String2"}). Nhưng đó không phải là Java hợp lệ.Mảng Java làm tham số

Trả lời

18

Đây là một "cách Java hợp lệ" (như trong, nó biên dịch và làm những gì bạn muốn):

foo(new String[] {"String1", "String2"}); 

Nếu bạn có cơ hội để thay đổi phương pháp này, sau đó bạn cũng có thể xem xét để thay đổi phương pháp để có một lập luận varargs:

public void foo(String... strings) { 
    // ... 
} 

Sau đó, bạn có thể sử dụng nó như sau mà không cần phải tạo ra một cách rõ ràng một mảng:

foo("String1", "String2"); 

Sau đây là sau đó cũng hợp lệ :

foo("String1"); 

foo("String1", "String2", "String3"); 

và thậm chí nhiều hơn nữa.

+0

Làm cách nào để nhận tiền phạt? –

4

Nếu bạn đang cố gắng tạo biến cục bộ s và giữ nó xung quanh, không, bạn không thể khai báo biến trong một cuộc gọi phương thức. Bạn phải khai báo nó đầu tiên bên ngoài của cuộc gọi:

String[] s = {"String1", "String2"}; 
foo(s); 

Bạn thể khởi s trong cuộc gọi, nhưng tôi không thấy bất kỳ lý do gì để làm như vậy, cộng với nó trông thực sự xấu:

String[] s; 
foo(s = new String[] {"String1", "String2"}); 
1

Nếu bạn muốn vượt qua chỉ có giá trị và không cần biến s nữa, làm điều đó như thế này:

foo(new String[] {"String1", "String2"}); 
0

Bạn không thể khai báo một biến, nhưng bạn có thể vượt qua một mảng:

foo(new String[] { "String1", "String2" }); 

Nếu bạn muốn tham chiếu cùng một mảng sau đó, thì bạn cần khai báo trước khi gọi.

0

Bạn chỉ có thể thực hiện foo (chuỗi mới [] {"String1", "String2"})

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