2011-09-10 53 views
10

我有這樣的方法:返回類型vararg?

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

有沒有辦法來定義一個返回式可變參數的方法,對嗎?理想情況下,我想要一個額外的實用方法:

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

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

對不對?

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

與上面的問題是,我們不能用數組分配混有一些神交實例Groks:

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

,我不認爲這是合法的,除非你可以定義返回一個類型的可變參數的(我猜)的方法。

感謝

回答

8

你可以做,

Grok[] generateMoreGroks() { 

如果一個方法需要一個可變參數的參數,它是一樣的服用陣列。

現在你需要重載富,使其能夠採取一些神交情況下,剩下的作爲可變參數,

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

您好耶但我不能混用在可變參數參數一些神交實例的陣列(如在呼叫爲foo上述())。我可以只提供一個數組或單個Grok實例。但不是兩個? – user291701

+0

@ user291701 - 這是正確的。 –

+0

編輯,以顯示如何做到這一點,它確實變得醜陋,雖然 – sbridges

4

沒有沒有......但改變功能簽名,這將工作得很好。

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

沒錯,但我不能在調用foo()時將一些新的Grok()實例與generateMoreGroks()返回的數組混合使用。 – user291701