返回类型vararg?

时间:2011-09-10 16:08:46

标签: 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() };
}

正确?

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

以上问题是我们不能将分配的Grok实例与Groks数组混合使用:

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

我不认为这是合法的,除非你可以定义一种方法来返回一种类型的vararg(我猜)。

由于

2 个答案:

答案 0 :(得分:8)

你可以,

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

这有点难看。

答案 1 :(得分:4)

没有没有...但是更改了功能签名,这样就可以了。

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