2010-12-14 15 views
13

कुछ विधि के लिए पहली कॉल कैसे स्पष्ट नहीं है कि यह स्ट्रिंग [] है?तर्क सूची में जावा सरणी प्रारंभिकरण

स्ट्रिंग [] सरणी बनाने के लिए सरणी प्रारंभकर्ता का उपयोग करना ठीक है लेकिन आप इसे तर्क देने के लिए उपयोग नहीं कर सकते हैं। क्या घुंघराले ब्रेसिज़ किसी अन्य फैशन में तर्कों को पारित करने के लिए उपयोग किए जाते हैं जो इस बात से निकलते हैं कि मैं इससे कैसे व्यवहार करूंगा?

public void someMethod(String[] arr){ 
    //do some magic 
} 

public void makeSomeMagic(){ 

    String[] arr = {"cat", "fish", "cow"}; 

    //Does not compile! 
    someMethod({"cat", "fish", "cow"}); 

    //This compiles! 
    someMethod(new String[]{"cat", "fish", "cow"}); 

    //This compiles! 
    someMethod(arr); 
} 

संकलक त्रुटि निम्नलिखित है:

विधि someMethod (String []) प्रकार में मू तर्क के लिए लागू नहीं है (स्ट्रिंग, स्ट्रिंग, स्ट्रिंग)

+1

इसकी घोषणा केवल समय पर ही दी गई है। यह एक वाक्यविन्यास चीज है –

उत्तर

12

आप केवल कर सकते हैं प्रारंभिक नोटेशन का उपयोग करते समय सरणी चर या किसी सरणी निर्माण अभिव्यक्ति में new String[] { ... } घोषित करते समय प्रारंभ करें।

जावा भाषा विशिष्टता में Section 10.6 Array Initializers देखें:

एक सरणी प्रारंभकर्ता एक घोषणा में निर्दिष्ट किया जा सकता है, या एक सरणी निर्माण अभिव्यक्ति (§15.10) का हिस्सा है, एक सरणी बनाने और कुछ प्रारंभिक मान प्रदान करने के रूप

5

आप स्पष्ट String[], उपयोग का उपयोग नहीं करना चाहते हैं:

public void someMethod(String... arr){ 
    //do some magic 
} 
… 
someMethod("cm", "applicant", "lead"); 
अंतिम पैरामीटर के प्रकार के बाद

तीन अवधियों संकेत मिलता है कि अंतिम तर्क एक सरणी के रूप में या तर्कों के एक दृश्य के रूप में पारित किया जा सकता है।

Read more

+3

यह केवल तभी काम करेगा जब वह 'स्ट्रिंग ... args' में हस्ताक्षर बदलता है। – aioobe

+0

@aioobe धन्यवाद। मैंने अपना जवाब अपडेट कर लिया है। – 0x2D9A3

+0

बिल्कुल सही, यह मुझे वही देता है जो मैं ढूंढ रहा था। धन्यवाद! –

1

या आप उपयोग कर सकते हैं varargs:

public void someMethod(String... arr){ 
    //do some magic 
} 

public void makeSomeMagic(){ 
    someMethod("cat", "fish", "cow"); 
} 

यह मूल रूप से एक सरणी पैरामीटर के लिए एक फैंसी वाक्य रचना है (vararg विधि हस्ताक्षर में पिछले पैरामीटर होना चाहिए)।

0

आप एक सरणी शुरू करने के लिए घुंघराले ब्रेसिज़ का उपयोग कर सकते हैं। हर मामले में इसका इस्तेमाल स्टेटमेंट के ब्लॉक को परिभाषित करने के लिए किया जाता है।

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