Tôi muốn biết nếu có thể giải nén một mảng đối tượng vào đối tượng riêng biệt trên cuộc gọi phương thức chấp nhận vargs. Câu hỏi này tương tự như this one.Làm thế nào để giải nén một mảng vào các đối số khác nhau về phương thức gọi
Tôi có một mã như:
public class Test {
public static Object doWork(Object... objects){
System.out.println(objects.length);
return objects;
}
public static void main(String[] args){
Object res = doWork("one", "two");
res = doWork("three", res);
}
}
Tôi muốn giải nén các đối tượng res
trong cuộc gọi thứ hai vì vậy nó sẽ nhận được một mảng đối tượng với chiều dài 3 thay vì chiều dài 2 như hiện nay (trong đó vị trí thứ hai là một mảng đối tượng có chiều dài 2, sau đó có cả ba đối số).
Thậm chí có thể trong Java không?
chi tiết thêm:
Bằng cách
Object res = doWork("one", "two");
res = doWork("three", res);
cuộc gọi thứ hai được gọi là:
doWork(Object[ "three", Object[ "one", "two" ] ])
nơi mà tôi muốn:
doWork(Object[ "one", "two", "three" ])
Tôi biết điều này có thể đạt được bằng cách thực hiện:
public static void main(String[] args){
res = doWork("one", "two");
List<Object> los = Arrays.asList(res);
los = new ArrayList<>(los); // Can't modify an underlying array
los.add("three");
res = doWork(los.toArray());
}
Nhưng tôi đang tìm kiếm một cái gì đó giống như unpack
Lua xây dựng trong chức năng hoặc cách Python được mô tả trong SO câu hỏi đề cập trước đây.
Cả hai câu trả lời được đưa ra bởi @chancea và @ Cyrille-ka đều tốt và cũng có thể giải quyết được sự cố. Một trong những sự kiện có thể là một ý tưởng tốt để đưa vào tài khoản là nếu chữ ký của phương pháp có thể được sửa đổi. @ cyrille-ka trả lời tôn trọng chữ ký của hàm, trong khi @chancea thì không. Tuy nhiên, tôi nghĩ rằng trong hầu hết các trường hợp, người ta chỉ có thể viết hàm bao hàm asimple cho một hàm khác, do đó không phải là vấn đề. Mặt khác cách @ chancea có thể dễ sử dụng hơn trong khi lập trình (không có lỗi nào có thể quên khi gọi hàm giải nén).
Thay vì giải nén bạn có thể thử để làm cho một phương pháp quá tải mà phải mất một mảng và sau đó các mảng khác nhau 'DoWork (Object [] objects1, Object ... objects2) 'và sau đó kết hợp chúng trong phương pháp .. .just một ý tưởng Tôi không thực sự biết nếu điều đó sẽ làm việc cho vấn đề của bạn. Bạn sẽ phải gọi nó như 'doWork (res," ba ")' thay vì 'doWork (" ba ", res)' – chancea
có thể trùng lặp của [Làm thế nào để nối hai mảng trong Java?] (Http: // stackoverflow. com/questions/80476/how-to-concatenate-two-array-in-java) –
@JonathanDrapeau không có điều này là khác biệt và sâu hơn so với chỉ ghép nối với mảng – chancea