2011-01-15 13 views
10

निम्नलिखित हस्ताक्षर के साथ एक विधि मान लें:मैं एक varray (ऑब्जेक्ट ...) की उम्मीद करने के तरीके में एक ArrayList कैसे पास करूं?

public static void foo(String arg1, String args2, Object... moreArgs); 

जब चल रहा है ...

ClassName.foo("something", "something", "first", "second", "third"); 

... मैं moreArgs[0] == "first", moreArgs[1] == "second" और moreArgs[2] == "third" मिलेगा।

लेकिन मान लीजिए कि मेरे पास ArrayList<String> में संग्रहीत पैरामीटर हैं जिन्हें arrayList कहा जाता है जिसमें "पहला", "दूसरा" और "तीसरा" होता है।

मैं इतना है कि moreArgs[0] == "first", moreArgs[1] == "second" और moreArgs[2] == "third"arrayList का उपयोग कर एक पैरामीटर के रूप foo कॉल करना चाहते हैं।

मेरे भोली प्रयास किया गया था ...

ClassName.foo("something", "something", arrayList); 

... लेकिन है कि मुझे moreArgs[0] == arrayList दे देंगे जो नहीं है कि मैं क्या चाहता था।

ऊपर इतना है कि moreArgs[0] == "first", moreArgs[1] == "second" और moreArgs[2] == "third"foo विधि के लिए arrayList पारित करने के लिए सही तरीका क्या है?

कृपया ध्यान दें कि arrayList में तर्कों की संख्या इस विशिष्ट मामले में तीन होती है, लेकिन जो समाधान मैं खोज रहा हूं वह स्पष्ट रूप से सामान्य होना चाहिए और arrayList में किसी भी तर्क के लिए काम करना चाहिए।

उत्तर

22

अपने ऐरेलिस्ट को ऑब्जेक्ट प्रकार के ऐरे में कनवर्ट करें।

ClassName.foo("something", "something", arrayList.toArray());
+0

ओह, यह इतना आसान था! मैंने ऑब्जेक्ट सोचा ...! = ऑब्जेक्ट []। धन्यवाद! :-) – knorv

+0

सामान्य ऑब्जेक्ट में! = ऑब्जेक्ट [], लेकिन varargs विधियों के लिए, कंपाइलर एक MyType ... पैरामीटर को MyType [] पैरामीटर में परिवर्तित करता है, और सभी तर्कों को रनटाइम पर एक सरणी में लपेटता है जो फ़ंक्शन पर पास हो जाता है। तो इस मामले में, आप एक सरणी संदर्भ में स्पष्ट रूप से गुजरकर varargs विधि के गुप्त आंतरिक हस्ताक्षर का लाभ उठाने के लिए मिलता है। –

-1

आप इसे कैसे उम्मीद करते हैं इसे पास करते हैं। हालांकि केवल एक चीज है, और यह ArrayList का संदर्भ है।

आपको अपनी सामग्री को सरणी सूची से बाहर स्थानांतरित करना होगा।

+0

मैं केवल foo विधि को कॉल करने वाले कोड को नियंत्रित कर सकता हूं, इसलिए foo विधि को बदलना एक विकल्प नहीं है। – knorv

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