public void foo(Integer... ids) { Integer... fIds = bar(ids); } public void bar(Integer... ids) { // I would like to eliminate few ids and return a subset. How should I declare the return argument }
Как мне объявить тип возврата для бара?
Вы можете ссылаться на параметры vararg как на массив.
public Integer[] bar(Integer... ids) { .. }
См. Документы Varargs
Все еще верно, что в массиве должны быть переданы несколько аргументов, но функция varargs автоматизирует и скрывает процесс
Для jvm это фактически массив, и компилятор скрыл создание массива.
Установите тип возврата bar равным Integer[], а в foo укажите fIds тип как Integer[].
bar
Integer[]
foo
fIds
Примерно так:
public Integer[] bar(Integer... ids) { List<Integer> res = new ArrayList<Integer>(); for (Integer id : ids) if (shouldBeIncluded(id)) res.add(id); return res.toArray(); }
Параметры переменных-аргументов являются просто синтаксическим сахаром для массивов, поэтому вы можете просто обрабатывать ids как массив Integer (т.е. Integer[]).
ids
Integer