के बीच ऑटो-अनबॉक्सिंग में अंतर मैंने जावा एसई 6 और जावा एसई 7 के बीच ऑटो अनबॉक्सिंग व्यवहार में एक अंतर देखा है। मुझे आश्चर्य है कि ऐसा क्यों है, क्योंकि मुझे परिवर्तनों का कोई दस्तावेज नहीं मिल रहा है इन दो संस्करणों के बीच इस व्यवहार में।जावा 6 बनाम जावा 7
Object[] objs = new Object[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
यह जावा SE 7 से javac के साथ ठीक संकलित हालांकि, अगर मैं संकलक "स्रोत 1.6" तर्क दे रहा अंतिम पंक्ति पर कोई त्रुटि मिलती है:
यहाँ एक सरल उदाहरण है
inconvertible types
found : java.lang.Object
required: int
मैंने देशी संस्करण 6 कंपाइलर (बिना किसी स्रोत विकल्प के) के साथ संकलित करने के लिए जावा एसई 6 डाउनलोड करने का प्रयास किया। यह सहमत है और ऊपर की तरह एक ही त्रुटि देता है।
तो क्या देता है? कुछ और प्रयोगों से ऐसा लगता है कि जावा 6 में अनबॉक्सिंग केवल अनबॉक्स मान सकता है जो स्पष्ट रूप से (संकलित समय पर) बॉक्स किए गए प्रकार का है। उदाहरण के लिए, यह दोनों संस्करणों में काम करता है:
Integer[] objs = new Integer[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
तो ऐसा लगता है जानने के बिना है कि जावा 6 और 7 के बीच, unboxing सुविधा इतना है कि यह Unbox वस्तु प्रकार डाली और एक बार में कर सकता है बढ़ाया गया था, (संकलन समय पर) कि मूल्य उचित बॉक्स प्रकार का है। हालांकि, जावा भाषा विशिष्टता या ब्लॉग पोस्टिंग के माध्यम से पढ़ना जो जावा 7 के समय लिखा गया था, मुझे इस बात का कोई बदलाव नहीं दिख रहा है, इसलिए मैं सोच रहा हूं कि परिवर्तन क्या है और यह "फीचर" कहलाता है ?
बस एक जिज्ञासा:
Object[] objs = new Float[2];
objs[0] = new Float(5);
int myInt = (int)objs[0];
यह ठीक संकलित लेकिन क्रम में एक ClassCastException देता है: परिवर्तन कारण, यह "गलत" unboxings को गति प्रदान करने के लिए संभव है।
इस पर कोई संदर्भ?
दिलचस्प। Autoboxing गड़बड़ के लिए एक नया घटक। मुझे लगता है कि आपका उदाहरण एक सरणी के बजाय एक ऑब्जेक्ट के साथ अधिक सरल और स्पष्ट हो सकता है। 'इंटीजर obj = नया इंटीजर (2); int x = (int) obj; ': जावा 7 पर काम करता है, जावा 6 पर त्रुटि देता है। – leonbloy
आप किस जेडीके का उपयोग कर रहे हैं? इसे विभिन्न विक्रेताओं के साथ भी करना पड़ सकता है ... –
@leonbloy: सरलीकरण के बारे में अच्छा बिंदु, मैंने इसे कुछ हद तक सरल बना दिया (मेरे मूल कोड से) लेकिन किसी भी तरह से बहुत जल्दी बंद कर दिया! – Morty