2012-07-04 5 views
10

कोड:जावा विधि में पैरामीटर के रूप में सरणी कैसे पास करें?

Object[] a={ myObject}; 
someMethod(Object ...arg); 

जब मैं कोशिश:

someMethod ({myObject}); 

मैं ग्रहण में त्रुटि प्राप्त।

लेकिन जब:

someMethod (a); 

सब ठीक। यह अंतर क्यों? धन्यवाद।

उत्तर

20

क्योंकि { myObject } वाक्यविन्यास special syntactic sugar है जो केवल तब लागू होता है जब आप एक सरणी चर प्रारंभ कर रहे हैं। ऐसा इसलिए है क्योंकि अपने स्वयं के असाइनमेंट में टाइप की जानकारी नहीं है; लेकिन असाइनमेंट के विशेष मामले में प्रकार को चर से पूरी तरह से अनुमानित किया जाता है।

पहले उदाहरण में, संकलक जानता है कि आप a (जो Object[] है) को असाइन कर रहे हैं, इसलिए इस वाक्यविन्यास की अनुमति है। उत्तरार्द्ध में आप एक चर प्रारंभ नहीं कर रहे हैं (और जावा के प्रकार अनुमान में कमजोरी के कारण, यह पैरामीटर असाइनमेंट के संदर्भ को भी पूरी तरह से काम नहीं करेगा)। इसलिए यह नहीं पता कि सरणी किस प्रकार का होना चाहिए, भले ही यह स्पष्ट रूप से निर्धारित कर सके कि आप यही करने की कोशिश कर रहे हैं (जैसे कि ब्लॉक को घोषित करना)।

someMethod (new Object[] { myObject }) 

कॉलिंग काम करेगा अगर आप एक चर का उपयोग किए बिना यथा-स्थान सरणी परिभाषित करना चाहते हैं।


जबकि इसके बाद के संस्करण के लिए कहा के रूप में अपने सवाल का जवाब, मैं ध्यान दें कि विधि आप कॉल कर रहे varargs बजाय स्पष्ट रूप से एक सरणी पैरामीटर की आवश्यकता होती है। तो इस मामले में आप बस

someMethod(myObject); 
+0

अच्छा, स्पष्ट, लंबे समय तक नहीं, काम पूरा हो सकता है। +1 –

6
someMethod(new Object[] { "" }); 

चाल चलाना चाहिए!

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