2010-11-06 28 views

Trả lời

8

Từ docs:

Ba giai đoạn sau khi loại trận chung kết tham số của chỉ ra rằng luận cuối cùng có thể được thông qua như một mảng hoặc như là một chuỗi các đối số.

Bạn không thể chuyển đối số một mảng.

+2

Và đó là điều tốt mà bạn không thể. Vì Java5, các quy tắc cho các phương thức giải quyết đã trở nên quá khó khăn khi autoboxing, varargs, và array đi vào hoạt động. – Thilo

2

Đó là bởi vì trên thực tế bạn cố gắng chuyển mảng chứa chuỗi và một mảng khác.

0

Vì nó không giống nhau. Bạn không thể trộn và kết hợp như thế. Một không hợp lệ trong ví dụ của bạn sẽ làm việc với một chữ ký chức năng như thế này:

public void foo(String head, String ... tail) 
0

Phương pháp này

public void foo(String... params); 

chỉ là một phiên bản tiện lợi của một này:

public void foo(String[] params); 

Và do đó bạn có thể gọi nó với một số chuỗi các biến (sẽ được chuyển đổi thành một mảng String bởi trình biên dịch) hoặc một mảng String, nhưng một kết hợp sẽ không hoạt động, theo thiết kế.

0

Hãy nghĩ về điều đó. Điều gì nếu bạn có một phương pháp như thế này:

public void foo(Object... objects); 

Và cố gắng gọi nó như thế này:

foo("bar", new Object[] { "baz" }); 

nên các Object[] ở vị trí thứ hai được coi là một đơn Object trong cuộc gọi varargs hay nên nó được "mở rộng"? Điều này sẽ dẫn đến hành vi rất khó hiểu.

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