Giả sử một phương pháp với chữ ký sau đây:Làm thế nào để vượt qua một ArrayList đến một phương thức mong đợi một vararg (Object ...)?
public static void foo(String arg1, String args2, Object... moreArgs);
Khi chạy ...
ClassName.foo("something", "something", "first", "second", "third");
... Tôi sẽ nhận được moreArgs[0] == "first"
, moreArgs[1] == "second"
và moreArgs[2] == "third"
.
Nhưng giả sử rằng tôi có các thông số được lưu trữ trong một ArrayList<String>
được gọi là arrayList
có chứa "đầu tiên", "thứ hai" và "thứ ba".
Tôi muốn gọi foo
để moreArgs[0] == "first"
, moreArgs[1] == "second"
và moreArgs[2] == "third"
sử dụng thông số arrayList
làm thông số.
nỗ lực ngây thơ của tôi là ...
ClassName.foo("something", "something", arrayList);
... nhưng điều đó sẽ cho tôi moreArgs[0] == arrayList
mà không phải là những gì tôi muốn.
Cách chính xác để vượt qua arrayList
đến phương pháp foo
ở trên để moreArgs[0] == "first"
, moreArgs[1] == "second"
và moreArgs[2] == "third"
?
Xin lưu ý rằng số đối số trong arrayList
xảy ra là ba trong trường hợp cụ thể này, nhưng giải pháp mà tôi đang tìm kiếm rõ ràng là chung và làm việc cho bất kỳ số đối số nào trong arrayList
.
Ồ, thật đơn giản! Tôi nghĩ Object ...! = Object []. Cảm ơn! :-) – knorv
Đối tượng chung! = Đối tượng [], nhưng đối với phương thức varargs, trình biên dịch chuyển đổi tham số MyType ... thành tham số MyType [] và kết thúc tất cả đối số vào một mảng tại thời gian chạy được chuyển đến hàm. Vì vậy, trong trường hợp này, bạn có thể tận dụng lợi thế của chữ ký nội bộ bí mật của phương thức varargs bằng cách chuyển một cách rõ ràng trong một tham chiếu mảng. –