Java 返回类型vararg?

Java 返回类型vararg?,java,Java,我有这样一种方法: void foo(int x, Grok... groks); 无法定义返回varargs类型的方法,对吗?理想情况下,我需要一个额外的util方法: foo(25, new Grok(), new Grok(), generateMoreGroks()); public Grok... generateMoreGroks() { return new Grok[] { new Grok(), new Grok(), new Grok() }; }

我有这样一种方法:

void foo(int x, Grok... groks);
无法定义返回varargs类型的方法,对吗?理想情况下,我需要一个额外的util方法:

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

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

----更多信息--------------

上面的问题是,我们不能将分配给那里的几个Grok实例与Grok数组混合使用:

 "new Grok(), new Grok(), generateMoreGroks());"
我认为这是不合法的,除非您可以定义一个方法来返回vararg类型(我猜)

谢谢

你能做到

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);
}

这有点难看。

不,没有。。。但是改变函数签名,这样就可以了

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

是的,但我不能在调用foo()时将几个“new Grok()”实例与generateMoreGroks()返回的数组混合使用。您好,是的,但我不能在varargs参数中将数组与一些Grok实例混合使用(如上面对foo()的调用)。我可以只提供一个数组,也可以提供单个Grok实例。但不是两者都有?啊,糟糕,语言不能处理这一点。好的,谢谢你的帮助,我认为这是支持这样的东西的最佳选择。你可以反转参数,比如:
foo(int x,Grok groks[],Grok…moreGroks)
并称之为
foo(25,generateMoreGroks(),new Grok(),new Grok())
。当然,我们仍然需要自己进行数组复制(不是什么大问题),我只是希望该语言能够支持这一点,因为它使我们的代码看起来更干净。这种方法的一个问题是,对于调用方想要指定的不同数量的fixed
Grok
s,您必须继续重载foo。我会定义
foo(int,Grok…groks)
,并让调用者构造一个
Grok
s的数组。