2012-08-31 9 views
42

मेरे पास List<Thing> है और मैं इसे doIt(final Thing... things) घोषित विधि में पास करना चाहता हूं। क्या ऐसा करने के लिए कोई रास्ता है?varargs के रूप में एक सूची पास करना

public doIt(final Thing... things) 
{ 
    // things get done here 
} 

List<Thing> things = /* initialized with all my things */; 

doIt(things); 

कि कोड स्पष्ट रूप से काम नहीं करता है क्योंकि doIt()Thing नहीं List<Thing> लेता है:

कोड कुछ इस तरह दिखता है।

क्या वर्रग्स के रूप में सूची में पास करने का कोई तरीका है?

यह एक Android एप्लिकेशन में है, लेकिन मैं नहीं दिख रहा है यही कारण है कि समाधान के लिए कुछ भी जावा

उत्तर

77

पर लागू नहीं होगा बस things.toArray(new Thing[things.size()]) गुजरती हैं।

+7

यह 'चीजें होनी चाहिए। ऑर्रे (नई बात [चीज़.size()]);'। – Gray

+2

यह करेगा। (और हाँ @ ग्रे सही है, यह उपयुक्त आकार की सरणी में गुजरने के लिए थोड़ा और अधिक कुशल है।) – xbakesx

+0

@ ग्रे: दोनों सही हैं – newacct

1

विविध तर्क को आंतरिक रूप से सरणी के रूप में व्याख्या किया जाता है। तो आपको इसे पहले से ही एक सरणी में परिवर्तित करना चाहिए। इसके अलावा आपके doIt विधि में आपको सरणी अनुक्रमणिका के साथ चीजों के तत्वों का उपयोग करना चाहिए।

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। यह बहुत अच्छा काम करता है। क्या आपके पास सरणी अनुक्रमणिका द्वारा तत्वों तक पहुंचने का एक कारण है, या यह है कि आप * ऐसा कर सकते हैं? ऐसा करने का कोई कारण नहीं है (चीज टी: चीजें) doIt() के अंदर, है ना? – xbakesx

+0

मैं आपके उत्तर और एसएलएक्स दोनों को सही जवाब नहीं दे सकता, इसलिए मुझे लगता है कि आपको अपना जवाब संपादित करना चाहिए, और काम करने का कारण जोड़ना चाहिए। तो मैं इसे सही जवाब दूंगा। क्षमा करें, लोग उत्तर में कोड देखना पसंद करते हैं। – xbakesx

+0

@xbakesx कोई कारण नहीं है कि आप प्रत्येक के लिए उपयोग नहीं कर सकते हैं। – Brian

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