जैसा कि आप देख सकते हैं, असहमति है कि एनपीई या कुछ अन्य अपवाद फेंक दिया जाना चाहिए।
आप स्वीकार करते हैं कि एक एनपीई विकल्पों से अधिक उपयुक्त है, और यह एक स्थिति है जहाँ null
स्पष्ट गलत है, तो यह है:
- यह एनपीई जल्दी फेंक करने के लिए बेहतर है, यानी कन्स्ट्रक्टर में, और
- इसे कस्टम अपवाद संदेश के साथ फेंकना बेहतर है; यानी
null
ऐसा नहीं होता है जब JVM एनपीई फेंकता है।
Objects.requireNonNull
का उपयोग कर उस संदर्भ में स्पष्ट रूप से अच्छा अभ्यास है।
आप भी इस के लिए जावा दावे इस्तेमाल कर सकते हैं, लेकिन आप के रूप में है कि क्या यह एक अच्छा या बुरा बात यह है कि परीक्षण बंद कर दिया जा सकता है के लिए एक निर्णय करने की जरूरत होगी। आपको यह विचार करना होगा कि प्रारंभिक चेक बंद करने का प्रदर्शन लाभ उन समस्याओं से अधिक है जो पहले की जांच नहीं कर सकते हैं। उदाहरण के लिए, मान लीजिए कि आप अनुमान में एनपीई उत्पादन के साथ बंद कर रहे हैं ... और आप इसका निदान नहीं कर सकते हैं। क्या आप दावे चालू करते हैं? क्या पर विचार किया गया है कोड का व्यवहार? क्या यह आपके सिस्टम को धीमा कर देगा (अन्य कई दावों की जांच के कारण)? क्या ऐसी स्थिति है जो एनपीई को फिर से शुरू करने की संभावना है?
(थ्रेडिंग-संबंधित बग अक्सर "नीले चंद्रमा में एक बार" चीजें होती हैं जो पुन: पेश करने में बहुत मुश्किल होती हैं। मैं तर्क दूंगा कि समस्या का निदान करने के लिए आपको जानकारी की आवश्यकता होती है जब भी ऐसा होता है ... न केवल जब आप assertion जांच सक्षम है।)
पिछड़ा संगतता तर्क संभवतः प्रासंगिक है। हालांकि, एक सामान्य नियम के रूप में आप पुराने जावा प्लेटफ़ॉर्म पर चलाने के लिए अपना कोड लिखें। यदि आपके पास जावा के पुराने संस्करणों का समर्थन करने के लिए विशिष्ट आवश्यकता है ... यह अलग है। लेकिन अगर ऐसा होता है, तो आपको जावा 7 एपीआई के खिलाफ अपना विकास नहीं करना चाहिए ... इसलिए आपके कंपाइलर/आईडीई को संकलन त्रुटि के रूप में Objects
कक्षा को ध्वजांकित करना चाहिए।
(केवल पुराने एपीआई का उपयोग करने के लिए खुद को प्रतिबंधित करना जब आपको अपनी कोड गुणवत्ता को पीड़ित करने की आवश्यकता नहीं होती है, और इसे पहले से "पुराना" बना दिया जाता है। नई सामग्री के इसे बनाना है आसान विश्वसनीय/पोषणीय अनुप्रयोगों लिखने के लिए जानबूझ कर का उपयोग नहीं यह है ... विकृत कल्पना कीजिए यदि आप अपने आप को जावा 1.1 तक ही सीमित ...)
1 -।। Fwiw, मुझे लगता है कि एनपीई के ठीक कर रहे हैं। और संदेश के साथ एनपीई (कहें) IllegalArgumentException
से अधिक विशिष्ट है, और रचनाकारों के लिए जावा मानक वर्ग पुस्तकालयों में बहुत से उदाहरण हैं, जो दस्तावेज एनपीई फेंकने के रूप में दस्तावेज हैं। इसके अलावा, इस विधि को इस तरह इस्तेमाल करने के लिए स्पष्ट रूप से डिजाइन किया गया था।
स्रोत
2013-05-07 22:41:02
यह निर्भर करता है। क्या आप अपने कन्स्ट्रक्टर में एक अपवाद फेंकना चाहते हैं? – Reimeus
दरअसल, अगर निर्माता को अपवाद नहीं दिया जाता है, तो निश्चित रूप से इस वर्ग के तरीकों को बुलाकर इसे फेंक दिया जाएगा। इसका उद्देश्य यह है: क्या मुझे सीधे निर्माण पर उपयोगकर्ता को रोकना चाहिए ("सावधान रहें कि कुछ ऑब्जेक्ट्स शून्य हैं इसलिए आप कुछ तरीकों को करने में सक्षम नहीं होंगे") या क्या मैं उन्हें इस अपवाद को फेंकने देता हूं (अगर वह कॉल करता है कक्षा के कुछ तरीकों)? – user2336315
मैं यहाँ बिल्डर पद्धति का उपयोग कर के लिए ले जाया गया है, और, रवि नीचे से पता चलता है के रूप में, IllegalArgumentException फेंक (या IllegalStateException।) – Marvo