2010-12-14 39 views
29

Trong Java, nó là hoàn toàn hợp pháp để khởi tạo một mảng String trong các cách sau:Chuỗi mảng khởi như tham số constructor

String[] s = {"FOO", "BAR"}; 

Tuy nhiên, khi cố gắng thuyết minh một lớp mà phải mất một mảng String như một tham số, các đoạn mã sau đây là không cho phép:

Test t = new Test({"test"}); 

Nhưng điều này làm việc một lần nữa:

Test t = new Test(new String[] {"test"}); 

Ai đó có thể giải thích lý do tại sao?

Trả lời

43
String[] s = {"FOO", "BAR"}; 

này được phép vào thời điểm tuyên bố chỉ

Bạn không thể

String[] s; 
s={"FOO", "BAR"}; 
5

Type[] x = { ... } là một khởi cú pháp cho mảng. Các { ... } được diễn giải một cách cụ thể chỉ trong bối cảnh cụ thể đó.

3

Đối với các bạn muốn có một cách đơn giản để vượt qua một mảng String, tôi đề nghị bạn sử dụng varargs

class Test { 
    public Test(String...args); 
} 

// same as new Test(new String[] { "test", "one" }) 
Test t = new Test("test", "one"); 
+0

Cảm ơn, nhưng đó không phải là thực sự là câu hỏi và bạn cũng được giả định rằng chúng tôi có thể sửa đổi các nhà xây dựng. –

+1

@Herminator Thông thường bạn có thể, nhưng không phải lúc nào. Lần tới bạn có thể biết mình có thể làm gì. –

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