2011-11-23 13 views
12

मैं समझता हूं कि ऑटो अन-मुक्केबाजी को देखभाल के साथ किया जाना चाहिए क्योंकि संदर्भ जो अन-बॉक्स किया जा रहा है वह शून्य हो सकता है। ऑटो-मुक्केबाजी को चेतावनी के रूप में चिह्नित क्यों किया जाता है? क्या यहां कुछ नुकसान हैं जो मुझे याद आ रही हैं?क्यों ऑटो-मुक्केबाजी चेतावनी के रूप में चिह्नित किया गया?

+0

मेरा आउट ऑफ़ द बॉक्स ग्रहण ऑटो-मुक्केबाजी और अन-मुक्केबाजी के लिए चेतावनी नहीं दिखाता है। ग्रहण का किस प्रकार/संस्करण का उपयोग कर रहे हैं? – LanguagesNamedAfterCofee

+2

आप प्रोजेक्ट प्रॉपर्टीज -> जावा कंपाइलर -> त्रुटियों/चेतावनियों -> संभावित प्रोग्रामिंग समस्याओं में इसे (और अन्य विभिन्न चेतावनियां) सक्षम कर सकते हैं। – Artium

+0

देखें: https://bugs.eclipse.org/bugs/show_bug.cgi?id=163065 यह बॉक्सिंग को अनबॉक्सिंग से अलग करने का एक सुविधा अनुरोध है। – Kyle

उत्तर

6

यदि आप प्रदर्शन समस्याओं (माइक्रो-ऑप्टिमाइज़ेशन के मामले में) की अपेक्षा नहीं करते हैं तो आप सुरक्षित रूप से इस चेतावनी को अक्षम कर सकते हैं। अगर आपको पता नहीं है कि ऑटो-मुक्केबाजी यहां खुश है तो यह सिर्फ एक संकेत है। व्यवसाय-तर्क कोड में जहां आपके पास I/O ओवरहेड है (डीबी लेनदेन या डिस्क पहुंच के कारण) ऑटो-मुक्केबाजी कभी भी कोई समस्या नहीं है।

+1

ग्रहण में, अन-मुक्केबाजी चेतावनियों को बंद किए बिना केवल मुक्केबाजी चेतावनियों को चालू करना संभव नहीं है। क्या यह कुछ है जो आप बंद करने का सुझाव देंगे (दोनों बंद)? मैं एक विश्वविद्यालय प्रोजेक्ट कर रहा हूं और शिक्षक अधिकतम चेतावनी स्तर पर शून्य चेतावनियां चाहता है। (चुनिंदा चेतावनियों को अनदेखा करने की अनुमति है) – Artium

+0

@Artium आपके मामले में आप स्पष्ट रूपांतरणों का उपयोग कर सकते हैं ताकि ऑपरेशन 'int i = Integer.intValue से दिखाई दे() 'और' इंटीजर I = नया इंटीजर (i) '। उसके बाद संकलक शिकायत नहीं करेगा। – stacker

+1

इन चेतावनियों को अलग करने से संबंधित एक बग है: https://bugs.eclipse.org/bugs/show_bug.cgi?id=163065 – Kyle

5

मैं इस ग्रहण चेतावनी को अक्षम करने जा रहा था लेकिन निम्नलिखित लेख ने मुझे नहीं माना। मैं अभी भी पूरी तरह से सुनिश्चित नहीं हूं लेकिन यह मुझे लगता है कि ऑटोबॉक्सिंग से बचने के लिए अच्छे कारण हो सकते हैं।

https://effective-java.com/2010/05/the-advantages-and-traps-of-autoboxing/

2

autoboxing, संग्रह की "निकालें" विधि से संबंधित एक बग में योगदान कर सकते, हालांकि यह शायद एक बहुत अस्पष्ट बग है।

मुझे इस बग का सामना करना पड़ा जब मैंने एक एररेलिस्ट से निकालने के लिए किसी आइटम की अनुक्रमणिका का चयन करने के लिए यादृच्छिक संख्या जेनरेटर का उपयोग किया। जेनरेटर एक लंबे आदिम लौटा, जिसे मैंने गलती से List.remove (int अनुक्रमणिका) के पैरामीटर के रूप में उपयोग करने का प्रयास किया। कंपाइलर लंबे समय तक लंबे समय तक परिवर्तित हो गया और इसे List.remove (ऑब्जेक्ट ओ) में इस्तेमाल किया, जिसने पूरी तरह से अलग व्यवहार दिया। सौभाग्य से, एक जोरदार बयान में त्रुटि जल्दी से पकड़ा।

"निकालने" के साथ इस मुद्दे की इस चर्चा के अनुसार, कोई और ऐसी ही समस्या में भाग गया जहां उनके इंट ने अप्रत्याशित रूप से एक इंटीजर की तरह काम किया, हालांकि मुझे नहीं पता कि यह कैसे हुआ। https://stackoverflow.com/questions/104799/why-arent-java-collections-remove-methods-generic (ScArcher2 द्वारा टिप्पणी देखें)

+0

यह अधिभारित कार्यों के लिए अपेक्षित व्यवहार है, न कि बग। –