पर विचार के लिए निम्न विधि हस्ताक्षर:वस्तु सरणियों
public fooMethod (Foo[] foos) { /*...*/ }
और
public fooMethod (Foo... foos) { /*...*/ }
स्पष्टीकरण: पूर्व एक तर्क के रूप फू-वस्तुओं की एक सरणी लेता है - fooMethod(new Foo[]{..})
- जबकि बाद प्रकार फू के तर्कों की मनमानी मात्रा लेता है, और उन्हें विधि के भीतर Foo: s के सरणी के रूप में प्रस्तुत करता है - fooMethod(fooObject1, fooObject2, etc...
)।
जावा दोनों फिट होने पर फिट फेंकता है, दावा करते हुए कि वे डुप्लिकेट विधियां हैं। मैंने कुछ जासूसी कार्य किया, और पाया कि पहली घोषणा वास्तव में फू ऑब्जेक्ट्स की एक स्पष्ट सरणी की आवश्यकता है, और यह विधि कॉल करने का यही एकमात्र तरीका है। दूसरा तरीका वास्तव में फू तर्कों की मनमानी मात्रा दोनों को स्वीकार करता है और फू ऑब्जेक्ट्स की एक सरणी भी स्वीकार करता है।
तो सवाल यह है कि चूंकि बाद की विधि अधिक लचीली प्रतीत होती है, क्या पहले उदाहरण का उपयोग करने के कोई कारण हैं, या क्या मुझे कुछ भी महत्वपूर्ण याद आया है?
जावा को नहीं जानते, यह अंधेरे में एक स्टैब है, लेकिन मुझे लगता है कि पहला मामूली रूप से अधिक कुशल है, क्योंकि: ए) आप केवल एक पॉइंटर को पास कर रहे होंगे, और बी) आप होंगे स्मृति के एक संगत हिस्से में एक सूचक को गुजरना। –
@monoxide: नहीं, दोनों रूपों समकक्ष कॉलिंग बाइटकोड उत्पन्न करते हैं, दोनों रूपों को पास करने के लिए एक सरणी बनाने की आवश्यकता होती है। –
दूसरा रूप पहले के लिए सिंटैक्टिक चीनी है। तो, fooMethod (नया फू (1), नया फू (2)) fooMethod (नया फू [] {नया फू (1), नया फू (2)}) –