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).

questionAnswers(3)

yourAnswerToTheQuestion