2009-11-25 14 views
11

का उपयोग कर सरणियों मैं कुछ इस तरह की कोशिश की:प्रारंभ त्रिगुट ऑपरेटर

 

boolean funkyBoolean = true; 
int array[] = funkyBoolean ? {1,2,3} : {4,5,6}; 
 

लेकिन इस कोड भी संकलन नहीं होंगे। क्या इसके लिए कोई स्पष्टीकरण है? funkyBoolean ? {1,2,3} : {4,5,6} एक वैध अभिव्यक्ति नहीं है? अग्रिम धन्यवाद!

उत्तर

27

आप केवल बहुत सीमित स्थितियों में {1, 2, 3} सिंटैक्स का उपयोग कर सकते हैं, और इस उनमें से एक नहीं है। इस प्रयास करें:

int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6}; 

वैसे, अच्छा जावा शैली घोषणा लिखना है के रूप में:

int[] array = ... 

संपादित करें: रिकॉर्ड के लिए, कारण यह है कि {1, 2, 3} तो प्रतिबंधित है कि इस प्रकार अस्पष्ट है । सिद्धांत रूप में यह पूर्णांक, लम्बे, फ्लोट इत्यादि की एक सरणी हो सकती है। इसके अलावा, जेएलएस द्वारा परिभाषित जावा व्याकरण इसे प्रतिबंधित करता है, इसलिए वह है।

+0

स्पष्टीकरण स्टीफन के लिए धन्यवाद! – marcosbeirigo

+0

जेडीके 7 में ऐसा लगता है कि '{1, 2, 3}' (अन्य स्थितियों में) एक सेट होगा, लक्ष्य टाइपिंग द्वारा निर्धारित प्रकार के साथ (जैसे सामान्य तरीके, जैसे 'Arrays.asList')। –

+0

बस रिकॉर्ड के लिए, प्रस्तावित भाषा परिवर्तन जो टॉम की टिप्पणी को इंगित करता है उसे जेडीके 7 में नहीं बनाया गया। –

5
boolean funkyBoolean = true; 
int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6}; 
3

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

है यही कारण है कि Java Spec कहते हैं प्रदान (के रूप में 10.6)। तो 'लघु' संस्करण (सृजन अभिव्यक्ति के साथ) केवल घोषणाओं (int[] a = {1,2,3};) में अनुमति है, अन्य सभी मामलों में आपको new int[]{1,2,3} निर्माण की आवश्यकता है, यदि आप प्रारंभकर्ता का उपयोग करना चाहते हैं।

+0

धन्यवाद, यह सहायक था! – marcosbeirigo

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