Как мне объявить переменный параметр-аргумент - PullRequest
0 голосов
/ 01 июня 2011
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 
}

Как мне объявить тип возврата для бара?

Ответы [ 4 ]

3 голосов
/ 01 июня 2011

Вы можете ссылаться на параметры vararg как на массив.

public Integer[] bar(Integer... ids) {
..
}

См. Документы Varargs

Все еще верно, что в массиве должны быть переданы несколько аргументов, но функция varargs автоматизирует и скрывает процесс

Для jvm это фактически массив, и компилятор скрыл создание массива.

2 голосов
/ 01 июня 2011

Установите тип возврата bar равным Integer[], а в foo укажите fIds тип как Integer[].

1 голос
/ 01 июня 2011

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

public Integer[] bar(Integer... ids) {
    List<Integer> res = new ArrayList<Integer>();
    for (Integer id : ids)
        if (shouldBeIncluded(id)) res.add(id);
    return res.toArray();
}
1 голос
/ 01 июня 2011

Параметры переменных-аргументов являются просто синтаксическим сахаром для массивов, поэтому вы можете просто обрабатывать ids как массив Integer (т.е. Integer[]).

...