एक स्थिर फैक्ट्री विधि किसी नई ऑब्जेक्ट को प्रारंभ करने में विफल होने पर मुझे कौन सा अपवाद फेंकना चाहिए? मैं null
लौटने के बजाय एक सार्थक अपवाद उठाना पसंद करता हूं।जावा: प्रारंभिक त्रुटि के लिए उपयुक्त अपवाद
उत्तर
यदि आप अपर्याप्त डेटा के कारण फैक्ट्री में अपवाद फेंक रहे हैं, तो मैं IllegalStateException
को "एक्स का निर्माण नहीं कर सकता, कोई वाई सेट नहीं किया जा सकता" जैसा वर्णन के साथ फेंकना चाहता हूं।
यदि आप विवादित डेटा के कारण फैक्ट्री में अपवाद फेंक रहे हैं, तो मैं IllegalStateException
को "एक्स के साथ एक्स, वाई संघर्षों का निर्माण नहीं कर सकता" जैसा वर्णन के साथ फेंकना चाहता हूं।
यदि आप खराब (या बकवास) मान के कारण फैक्ट्री में अपवाद फेंक रहे हैं, तो मैं IllegalArgumentException
को "वाई नहीं हो सकता" जैसा वर्णन के साथ फेंकना चाहता हूं।
यदि आप लापता मूल्य के कारण फैक्ट्री में अपवाद फेंक रहे हैं, तो मैं IllegalArgumentException
को "वाई नॉट नल" जैसा विवरण के साथ फेंकना चाहता हूं।
अंतिम प्राथमिकता कुछ बहस तक है। कुछ लोग सुझाव देते हैं कि NullPointerException
फेंकना बेहतर हो सकता है; मेरे मामले में, हम उन्हें हर कीमत से बचते हैं क्योंकि कई ग्राहक अपवाद संदेश नहीं पढ़ते हैं (और मान लें कि NullPointerException का मतलब कोडिंग त्रुटि है)।
किसी भी घटना में, आपको अपवाद को फेंकने के लिए एक अच्छा, विशिष्ट, संदेश प्रदान करना चाहिए, ताकि भविष्य में कुछ हद तक अपवाद को देखने के भविष्य की समर्थन लागत को कम किया जा सके।
आप अपवाद वर्ग का विस्तार
क्या इस मामले के लिए कोई अंतर्निहित अपवाद नहीं है? यह काफी आम परिदृश्य है। –
मैं शायद एक कन्स्ट्रक्टर को एक सामान्य परिदृश्य को फेंकने वाला कन्स्ट्रक्टर कहूंगा – Woot4Moo
बहुत सारे अपवाद हैं लेकिन अनुकूलित संदेश को प्रदर्शित करने की आवश्यकता होने पर यह स्वयं के लिए अधिक लचीला है –
कुछ इस तरह शायद सिर्फ होना चाहिए एक जोर से अपनी खुद की अपवाद बना सकते हैं, लेकिन अगर वहाँ वास्तव में तो यह है कि आप करने के लिए सार्थक है एक कस्टम अपवाद विफल इस के लिए संभावना होगा मेरी पसंद हो
आदर्श रूप से आप Exception
का विस्तार करना चाहते हैं और अपना खुद का IntializatonException
तैयार करना चाहते हैं।
हाँ, समस्या का कारण आपकी सबसे अच्छी शर्त है। यदि तर्क ठीक नहीं हैं, तो आप IllegalArgumentException को फेंक सकते हैं, अगर कुछ फ़ाइल नहीं है, तो आप FileNotFoundException को फेंक सकते हैं, अगर कारखाने को ठीक से शुरू नहीं किया गया है, तो आप IllegalStateException, आदि को फेंक सकते हैं ...
हालांकि, अपना खुद का अपवाद बनाना आसान है। बस आपको कक्षाके रूप में घोषित करें और प्रतिनिधि रचनाकार जोड़ें। यदि आप अपवाद बढ़ाते हैं, तो वह विधि जो इसे फेंक सकती है उसे throws
के साथ घोषित किया जाना चाहिए। यदि आप यह नहीं चाहते हैं, तो आप RuntimeException का विस्तार कर सकते हैं, जिन्हें घोषित नहीं किया जाना चाहिए।
यह इस बात पर निर्भर करेगा कि विफलता के कारण, यानी नेटवर्क समस्या, फ़ाइल पढ़ने में विफलता, आदि .. – Viruzzo
आपका मतलब है कि मुझे शुरुआत के दौरान जो भी अपवाद मिला है उसे फेंक देना चाहिए? –
जरूरी नहीं है, लेकिन आपके अपवाद को गलत कहने में सार्थक होना चाहिए, न केवल * कुछ * गलत हो गया। – Viruzzo