Возвращать тип vararg?

У меня есть метод вроде:

void foo(int x, Grok... groks);

Нет способа определить метод, возвращающий тип varargs, не так ли? В идеале я хочу использовать дополнительный метод использования:

foo(25, new Grok(), new Grok(), generateMoreGroks());

public Grok... generateMoreGroks() {
    return new Grok[] {
        new Grok(), new Grok(), new Grok() };
}

верно?

---- Дополнительная информация --------------

Проблема с вышеизложенным заключается в том, что мы не можем смешивать несколько экземпляров Grok, выделенных там с массивом Groks:

 "new Grok(), new Grok(), generateMoreGroks());"

и я не думаю, что это законно, если вы не можете определить метод для возврата типа vararg (я думаю).

Спасибо

Ответ 1

Вы можете сделать,

Grok[] generateMoreGroks() {

Если метод принимает параметр varargs, он совпадает с тем, что принимает массив.

Теперь вам нужно перегрузить foo, чтобы он мог принимать некоторые экземпляры Grok, а остальное как varargs,

foo(int x, Grok... rest)
foo(int x, Grok g1, Grok... rest)
foo(int x, Grok g1, Grok g2, Grok... rest)
foo(int x, Grok g1, Grok g2, Grok g3, Grok... rest)

Где используются методы foo,

foo(int x, Grok g1, Grok... rest) {
     Grok[] groks = new Grok[rest.length + 1];
     groks[0] = g1;
     System.arrayCopy(rest, 0, groks, 1, rest.length);
     foo(x, groks);
}

Это немного уродливо.

Ответ 2

Нет, нет... но измените подпись функции, и это будет нормально работать.

public Grok[] generateMoreGroks() {
    return new Grok[] {
        new Grok(), new Grok(), new Grok() };
}