2011-09-10 17 views
10

मेरे पास एक विधि है:वापसी प्रकार 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() }; 
} 

सही?

---- अधिक जानकारी --------------

उपरोक्त के साथ समस्या यह है कि हम वहां कुछ आवंटित उदाहरणों को मिश्रित नहीं कर सकते हैं Groks:

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

और मुझे नहीं लगता कि यह कानूनी है, जब तक कि आप एक प्रकार का vararg (मुझे लगता है) वापस करने के लिए एक विधि परिभाषित नहीं कर सकता।

धन्यवाद

उत्तर

8

आप क्या कर सकते हैं,

Grok[] generateMoreGroks() { 

एक विधि एक varargs पैरामीटर लेता है, तो यह एक सरणी लेने के समान है।

अब आप और 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); 
} 

इसमें कुछ समय बदसूरत है foo ओवरलोड यह कुछ Grok उदाहरणों लेने की अनुमति की जरूरत है, ।

+2

हाय हाँ, लेकिन मैं varargs पैरामीटर में कुछ ग्रोक उदाहरणों के साथ एक सरणी मिश्रण नहीं कर सकता (जैसे ऊपर foo() को कॉल में)। मैं या तो केवल एक सरणी, या व्यक्तिगत ग्रोक उदाहरण प्रदान कर सकते हैं। लेकिन दोनों नहीं? – user291701

+0

@ user291701 - यह सही है। –

+0

यह दिखाने के लिए संपादित किया गया कि यह कैसे करें, यह बदसूरत हो जाता है हालांकि – sbridges

4

कोई नहीं है ... लेकिन फ़ंक्शन हस्ताक्षर बदलें और यह ठीक काम करेगा।

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

ठीक है लेकिन मैं कुछ 'नए ग्रोक()' उदाहरणों को मिश्रित करने के लिए जेनरमोरगोक() द्वारा कॉल में foo() में मिश्रित सरणी के साथ मिश्रण नहीं कर सकता। – user291701

संबंधित मुद्दे