2012-03-15 40 views
6

thể trùng lặp:
varargs and the '…' argument
Java, 3 dots in parameters"Chuỗi ..." trong java là gì?

tôi thấy định nghĩa này trong file java android của tôi. Dường như String []. Chúng có khác nhau không? Cảm ơn bạn.

+10

http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html – assylias

+0

và http: // stackoverflow. com/questions/1656901/varargs-and-the-argument – assylias

+0

... hoặc bất kỳ sách giáo khoa Java nào được viết trong 5 năm qua. –

Trả lời

5

Đó là cú pháp để viết các mục của mảng như một tham số

ví dụ:

public String first (String... values) { 
    return values[0]; 
} 

Sau đó, bạn có thể gọi phương pháp này với first("4","2","5","67")

Các javacompiler sẽ tạo ra một mảng của thông số của riêng nó.

+0

trước tiên ("4", "2", "5", "67"), không phải trước tiên (4,2,5,67) –

+0

đúng. Vì một lý do tôi đã suy nghĩ về số nguyên. –

13

varags. Nếu chữ ký của phương thức là method(Param param, String... x), nó sẽ lấy một loại đối tượng Parambất kỳ số nào của các đối tượng Chuỗi là.

Có vài nếu điều thú vị về nó:

  1. Không có gì đặc biệt. Nó chỉ là mảng có đường. Vì vậy, method(MyObject... o) giống với method(MyObject[] o).

  2. Vararg phải là thông số cuối cùng trong danh sách đối số.

  3. Có điều thú vị này khiến tôi nhớ một lần. method(MyObject... o) có thể được gọi là method() mà không có bất kỳ lỗi biên dịch nào. Java sẽ chuyển đổi nội bộ cuộc gọi no-arg thành method(new MyObject[0]). Vì vậy, hãy nhận biết điều này.

1

Đó là số lượng đối số biến thiên. Trong phần thân phương thức bạn xử lý nó như là một String [], nhưng khi bạn gọi phương thức, bạn có thể chọn cung cấp một String [] hoặc chỉ đơn giản liệt kê các giá trị của bạn.

void foo(String... blah) { } 

void bar() { 
    String[] a = { "hello", "world" }; 
    foo(a); // call with String[] 
    foo("hello", "world"); // or simply enumerate items 
} 

Được giới thiệu với Java 5.

0

String là một loại chuỗi. String[] là một chuỗi các chuỗi.

String ... là một đường cú pháp có tên ellipsis, được giới thiệu trong java 1.5 và được lấy từ C. Nó có thể được sử dụng trong các định nghĩa phương thức và thực sự giống như mảng chỉ có một khác biệt. Nếu phương pháp được định nghĩa là:

public void foo(String[] arg){}

bạn phải vượt qua mảng với nó:

foo(new String[] {"a", "b"});

Nếu phương pháp được định nghĩa là:

public void foo(String arg){}

Bạn có thể gọi hoặc là

foo(new String[] {"a", "b"});

hoặc

foo("a", "b");