निम्नलिखित हस्ताक्षर के साथ एक विधि मान लें:मैं एक 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
में किसी भी तर्क के लिए काम करना चाहिए।
ओह, यह इतना आसान था! मैंने ऑब्जेक्ट सोचा ...! = ऑब्जेक्ट []। धन्यवाद! :-) – knorv
सामान्य ऑब्जेक्ट में! = ऑब्जेक्ट [], लेकिन varargs विधियों के लिए, कंपाइलर एक MyType ... पैरामीटर को MyType [] पैरामीटर में परिवर्तित करता है, और सभी तर्कों को रनटाइम पर एक सरणी में लपेटता है जो फ़ंक्शन पर पास हो जाता है। तो इस मामले में, आप एक सरणी संदर्भ में स्पष्ट रूप से गुजरकर varargs विधि के गुप्त आंतरिक हस्ताक्षर का लाभ उठाने के लिए मिलता है। –