Jak rozpakować tablicę na różne argumenty w wywołaniu metody
Chciałbym wiedzieć, czy możliwe jest rozpakowanie tablicy obiektów do oddzielnego obiektu na wywołanie metody, które akceptuje vargs. To pytanie jest podobne do tegoten.
Mam kod taki jak:
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);
}
}
Chciałbym rozpakowaćres
obiekt w drugim wywołaniu, tak aby otrzymywał tablicę obiektów o długości 3 zamiast długości 2, jak teraz (gdzie druga pozycja jest tablicą obiektów o długości 2, mającą wtedy wszystkie trzy argumenty).
Czy jest to możliwe w Javie?
Bardziej szczegółowe:
Wykonując
Object res = doWork("one", "two");
res = doWork("three", res);
drugie wywołanie zostanie wywołane jako:
doWork( Object[ "three", Object[ "one", "two" ] ] )
gdzie chciałbym:
doWork(Object[ "one", "two", "three" ] )
Wiem, że można to osiągnąć poprzez:
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());
}
Ale szukam czegoś takiegounpack
Lua wbudowana funkcja lub sposób w Pythonie opisany we wcześniej wspomnianym pytaniu o SO.
Obie odpowiedzi podane przez @chancea i @ Cyrille-ka są dobre, a także rozwiązują problem. Jednym z faktów, który może być dobrym pomysłem do wzięcia pod uwagę, jest możliwość modyfikacji podpisu metody. Odpowiedź @ cyrille-ka respektuje sygnaturę funkcji, podczas gdy @chancea nie. Sądzę jednak, że w większości przypadków można po prostu napisać funkcję opakowującą asymetrię do innej, więc nie powinno to stanowić problemu. Z drugiej strony sposób @ chancea może być łatwiejszy w użyciu podczas programowania (nie ma możliwości pomyłki w zapomnieniu wywołania funkcji rozpakowywania).