2013-08-11 26 views
7

Trong mã:'Chuỗi ...' có nghĩa là gì?

không

String... pricingTypes 

nghĩa là gì? Loại cấu trúc này là gì?

+0

[Biến thể] (http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html) –

+0

Kiểm tra [hướng dẫn đối số] (http://docs.oracle.com /javase/tutorial/java/javaOO/arguments.html) để tìm hiểu về varargs. –

Trả lời

5

Nó được gọi là varargs. Nó hoạt động cho bất kỳ loại nào miễn là đó là đối số cuối cùng trong số đối số.

Về cơ bản, bất kỳ số tham số nào được đưa vào một mảng. Điều này không có nghĩa là nó tương đương với một mảng.

Một phương pháp mà trông giống như:

void foo(int bar, Socket baz...) 

sẽ có một mảng của Socket (trong ví dụ này) gọi là baz.

Vì vậy, nếu chúng tôi gọi foo(32, sSock.accept(), new Socket()), chúng tôi sẽ tìm một mảng có hai đối tượng Socket.

Gọi nó như foo(32, mySocketArray) sẽ không làm việc như kiểu là không cấu hình để mất một mảng. Tuy nhiên, nếu chữ ký là một varargs của mảng, bạn có thể vượt qua một hoặc nhiều mảng và nhận được một mảng hai chiều. Ví dụ: void bar(int bar, PrintStream[] baz...) có thể lấy nhiều mảng PrintStream và dán chúng vào một đơn PrintStream[][].

Rất kỳ quặc, do thực tế là mảng là đối tượng, Object... foo có thể lấy bất kỳ số lượng mảng nào.