Самый читаемый способ добавления элементов в вызов Java vararg - PullRequest
4 голосов
/ 13 февраля 2012

Если у меня есть метод public void foo(Object... x), я могу вызвать его следующим образом:

Object[] bar = ...;
foo(bar);

Однако это не сработает:

Object baz = ...;
Object[] bar = ...;
foo(baz, bar);

Очевидно, он можетсделать это, создав массив размером 1 больше bar и скопировав туда baz и содержимое bar.Но есть ли более удобочитаемый ярлык?

Ответы [ 3 ]

5 голосов
/ 13 февраля 2012

Класс Guava ObjectArrays предоставляет методы для объединения одного объекта в начало или конец массива, в основном для этой цели.Нет способа обойти линейные накладные расходы, но он уже создан и протестирован для вас.

3 голосов
/ 13 февраля 2012

К сожалению, нет готового способа сделать это более читабельным.

Однако вы можете создать вспомогательный метод, который будет принимать массив и параметр vargs и возвращать массив с добавленным varargs.

Примерно так:

public T[] append(T[] originalArray, T... additionalElements) { ... }

foo( append( bar, baz) );
1 голос
/ 13 февраля 2012

Возможна перегрузка foo():

public void foo(Object... x) {}
public void foo(Object[] a, Object... x) {}
...