2012-03-13 16 views
24

एक स्थिर फैक्ट्री विधि किसी नई ऑब्जेक्ट को प्रारंभ करने में विफल होने पर मुझे कौन सा अपवाद फेंकना चाहिए? मैं null लौटने के बजाय एक सार्थक अपवाद उठाना पसंद करता हूं।जावा: प्रारंभिक त्रुटि के लिए उपयुक्त अपवाद

+1

यह इस बात पर निर्भर करेगा कि विफलता के कारण, यानी नेटवर्क समस्या, फ़ाइल पढ़ने में विफलता, आदि .. – Viruzzo

+0

आपका मतलब है कि मुझे शुरुआत के दौरान जो भी अपवाद मिला है उसे फेंक देना चाहिए? –

+0

जरूरी नहीं है, लेकिन आपके अपवाद को गलत कहने में सार्थक होना चाहिए, न केवल * कुछ * गलत हो गया। – Viruzzo

उत्तर

28

यदि आप अपर्याप्त डेटा के कारण फैक्ट्री में अपवाद फेंक रहे हैं, तो मैं IllegalStateException को "एक्स का निर्माण नहीं कर सकता, कोई वाई सेट नहीं किया जा सकता" जैसा वर्णन के साथ फेंकना चाहता हूं।

यदि आप विवादित डेटा के कारण फैक्ट्री में अपवाद फेंक रहे हैं, तो मैं IllegalStateException को "एक्स के साथ एक्स, वाई संघर्षों का निर्माण नहीं कर सकता" जैसा वर्णन के साथ फेंकना चाहता हूं।

यदि आप खराब (या बकवास) मान के कारण फैक्ट्री में अपवाद फेंक रहे हैं, तो मैं IllegalArgumentException को "वाई नहीं हो सकता" जैसा वर्णन के साथ फेंकना चाहता हूं।

यदि आप लापता मूल्य के कारण फैक्ट्री में अपवाद फेंक रहे हैं, तो मैं IllegalArgumentException को "वाई नॉट नल" जैसा विवरण के साथ फेंकना चाहता हूं।

अंतिम प्राथमिकता कुछ बहस तक है। कुछ लोग सुझाव देते हैं कि NullPointerException फेंकना बेहतर हो सकता है; मेरे मामले में, हम उन्हें हर कीमत से बचते हैं क्योंकि कई ग्राहक अपवाद संदेश नहीं पढ़ते हैं (और मान लें कि NullPointerException का मतलब कोडिंग त्रुटि है)।

किसी भी घटना में, आपको अपवाद को फेंकने के लिए एक अच्छा, विशिष्ट, संदेश प्रदान करना चाहिए, ताकि भविष्य में कुछ हद तक अपवाद को देखने के भविष्य की समर्थन लागत को कम किया जा सके।

2

आप अपवाद वर्ग का विस्तार

+0

क्या इस मामले के लिए कोई अंतर्निहित अपवाद नहीं है? यह काफी आम परिदृश्य है। –

+0

मैं शायद एक कन्स्ट्रक्टर को एक सामान्य परिदृश्य को फेंकने वाला कन्स्ट्रक्टर कहूंगा – Woot4Moo

+0

बहुत सारे अपवाद हैं लेकिन अनुकूलित संदेश को प्रदर्शित करने की आवश्यकता होने पर यह स्वयं के लिए अधिक लचीला है –

2

कुछ इस तरह शायद सिर्फ होना चाहिए एक जोर से अपनी खुद की अपवाद बना सकते हैं, लेकिन अगर वहाँ वास्तव में तो यह है कि आप करने के लिए सार्थक है एक कस्टम अपवाद विफल इस के लिए संभावना होगा मेरी पसंद हो

1

आदर्श रूप से आप Exception का विस्तार करना चाहते हैं और अपना खुद का IntializatonException तैयार करना चाहते हैं।

2

हाँ, समस्या का कारण आपकी सबसे अच्छी शर्त है। यदि तर्क ठीक नहीं हैं, तो आप IllegalArgumentException को फेंक सकते हैं, अगर कुछ फ़ाइल नहीं है, तो आप FileNotFoundException को फेंक सकते हैं, अगर कारखाने को ठीक से शुरू नहीं किया गया है, तो आप IllegalStateException, आदि को फेंक सकते हैं ...

हालांकि, अपना खुद का अपवाद बनाना आसान है। बस आपको कक्षाके रूप में घोषित करें और प्रतिनिधि रचनाकार जोड़ें। यदि आप अपवाद बढ़ाते हैं, तो वह विधि जो इसे फेंक सकती है उसे throws के साथ घोषित किया जाना चाहिए। यदि आप यह नहीं चाहते हैं, तो आप RuntimeException का विस्तार कर सकते हैं, जिन्हें घोषित नहीं किया जाना चाहिए।

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