2012-07-27 18 views
14

Ba dấu chấm (...) cho biết khi được sử dụng như một phần của tham số trong khi định nghĩa phương thức?Ba dấu chấm (...) cho biết khi được sử dụng như một phần của tham số trong khi định nghĩa phương thức?

Ngoài ra, có bất kỳ thuật ngữ lập trình nào cho biểu tượng của 3 dấu chấm đó không?

tôi nhận thấy trong một mẫu mã:

public void method1 (Animal... animal) { 
// Code 
} 

Và phương pháp này được gọi là từ 2 nơi. Các đối số được truyền khi gọi là khác nhau trong cả hai kịch bản mặc dù:

  1. mảng của các đối tượng được thông qua như là một cuộc tranh cãi để method1 (Animal ...)

  2. đối tượng của lớp động vật thông qua như là một cuộc tranh cãi để method1 (động vật ...)

vì vậy, nó là một cái gì đó như thế nào, nếu bạn không chắc chắn liệu bạn sẽ được đi qua một yếu tố duy nhất của một mảng hoặc toàn bộ mảng như một cuộc tranh cãi với phương pháp này, bạn sử dụng 3 dấu chấm như một phần của tham số trong định nghĩa phương thức?

Ngoài ra, vui lòng cho tôi biết nếu có bất kỳ cụm từ lập trình nào cho biểu tượng của 3 dấu chấm đó.

Trả lời

16

Nó được gọi là varargs.

Điều đó có nghĩa là bạn có thể chuyển nhiều loại đó theo ý muốn.

Nó thực sự dịch nó thành method1(Animal[] a) và bạn tham khảo chúng dưới dạng a[1] giống như bất kỳ mảng nào khác.

Nếu tôi đã sau

Cat whiskers = new Cat(); 
Dog rufus = new Dog(); 
Dolphin flipper = new Dolphin(); 

method1(whiskers, rufus, flipper); // okay! 
method1(rufus); // okay! 
method1(); // okay! 
method1(flipper,new Parakeet()); // okay! 
4

Điều đó có nghĩa rằng phương pháp này chấp nhận một mảng của loại đối tượng nhưng, mảng được tạo ra tự động khi bạn vượt qua nhiều đối tượng của loại phân cách bằng dấu phẩy. Hãy nhớ rằng chỉ có thể có một tham số vararg của một kiểu đã cho trong một chữ ký phương thức, và bạn không thể có một đối số cùng loại trong chữ ký theo sau vararg (rõ ràng, sẽ không có cách nào phân biệt giữa hai).

1

Điều đó có nghĩa là không hoặc nhiều đối tượng String (hoặc một mảng trong số chúng) có thể được chuyển làm (các) tham số cho hàm đó.

Có thể:

x("foo", "bar"); 
x("foo", "bar", "baz"); 
Các vấn đề liên quan