2013-07-29 5 views
6

आप एक चर को परिभाषित कर रहे हैं, यह घोषणा/इस प्रकार एक चर को परिभाषित करने के पूरी तरह से वैध प्रतीत होता है :जावा में, {ए, बी, सी, ...} सरणी शॉर्टेंड अनुचित क्यों है, और क्यों?</p> <pre><code>double[][] output = {{0,0},{1,0}}; </code></pre> <p>लेकिन आप एक मूल्य के लिए लौट रहे हैं तो ऐसा निम्नलिखित लिखने के लिए अवैध प्रतीत होता है:

public double[] foo(){ 
     return {0,1,2} 
    } 

मैंने सोचा होगा कि आंतरिक रूप से, ये दोनों एक ही कार्रवाई कर रहे होंगे। ग्रहण, कम से कम, असहमत। क्या किसी को पता है कि अंतर क्या है, और यह कहां देखा जा सकता है, या पूर्व उदाहरण को स्वीकार करने और उत्तरार्द्ध को अस्वीकार करने के लिए फायदेमंद क्यों होगा?

संपादित करें: ठीक है, तो जब आप प्रारंभ कर रहे हैं तो यह उचित है, लेकिन मुझे कोई अस्पष्टता दिखाई नहीं दे रही है ... क्या JVM वेरिएबल के नाम से चर के प्रकार की व्याख्या नहीं कर सकता (फिर से परिभाषित करने के मामले में पहले से ही प्रारंभिक चर) या लौटने पर (जहां JVM फ़ंक्शन के रिटर्न प्रकार को देख सकता है)? प्रारंभिकरण को एक नियम का एक विशेष मामला क्या बनाता है जो अंतर्निहित प्रकार को प्रतिबंधित करेगा? सामान्य नियम को स्पष्ट प्रकार की आवश्यकता होती है?

उत्तर

5

यह एक घोषणा के दौरान ही स्वीकार्य है। हालांकि, आप new double[] {0, 1, 2} का उपयोग कर सकते हैं।

JLS §10.6:

एक सरणी प्रारंभकर्ता एक घोषणा में निर्दिष्ट किया जा सकता है, या एक सरणी निर्माण अभिव्यक्ति के हिस्से के रूप।

एक सरणी निर्माण अभिव्यक्ति new double[] { } वाक्यविन्यास है।

+0

"यह घोषणा के दौरान ही स्वीकार्य है।" क्यूं कर? रिटर्न स्टेटमेंट के दौरान क्यों नहीं? –

+0

@ जोहानपी क्योंकि भाषा इसे अनुमति नहीं देती है। जहां तक ​​मुझे पता है, इसके खिलाफ कोई अच्छा मामला नहीं है (मुझे लगता है कि निर्माण सुनिश्चित करने के लिए संकलक को थोड़ा और प्रकार का अनुमान लगाना पड़ सकता है)। – Jeffrey

12

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

कहीं और इसका इस्तेमाल करने के लिए आप Array Creation Expression उपयोग करने की आवश्यकता:

return new double[] {0,1,2}; 
+0

"इसे कहीं और उपयोग करने के लिए आपको ऐरे क्रिएशन एक्सप्रेशन का उपयोग करने की आवश्यकता है"। क्यूं कर? रिटर्न स्टेटमेंट एक ही नोटेशन का उपयोग क्यों नहीं कर सकता? –

+0

@ जॉन पीपी। क्योंकि, जावा भाषा निर्माता ने इसे इस तरह से डिजाइन किया है। देखें [जेएलएस अनुभाग 10.6] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.6)। –

+0

नहीं, मुझे ऐसा नहीं लगता है। अगर मैंने पूछा कि पक्षियों ने फर के बजाय पंख विकसित क्यों किए हैं, "क्योंकि निर्माता ने इसे इस तरह बनाया है" कहीं भी संतोषजनक नहीं होगा, है ना? मैं जेफरी के जवाब को पूरी तरह से स्वीकार करने की अधिक संभावना है क्योंकि आपने विनती की थी। –

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