2010-09-27 21 views
16

मेरे पास एक ऐसा फ़ंक्शन है जो तर्क के रूप में पारित सूची के माध्य की गणना करता है। मुझे पता है कि जो जावा अपवाद की मैं फेंक चाहिए जब मैं आकार 0.फेंकने के लिए क्या अपवाद?

public double mean (MyLinkedList<? extends Number> list) 
{ 
    if (list.isEmpty()) 
     throw new ????????; //If I am not mistaken Java has some defined exception for this case 

    //code goes here 
} 

धन्यवाद की एक सूची के माध्य की गणना करने की कोशिश करना चाहते हैं।

उत्तर

25

आप एक new IllegalArgumentException() फेंक कर सकते हैं।

यह इंगित करने के लिए फेंक दिया गया कि एक विधि अवैध या अनुचित तर्क पारित कर दी गई है।

बस पहले तर्क के रूप में एक स्पष्ट संदेश को पारित करना न भूलें। यह वास्तव में आपको समझने में मदद करेगा कि क्या खुशी है।

उदाहरण के लिए "खाली सूची पर माध्य का उपयोग नहीं कर सकता"।

+0

अच्छी तरह से, मुझे लगता है कि कौन सा अपवाद संभालने के लिए सबसे अच्छा तरीका है अपने प्रोग्राम को तोड़ना और जावा कंपाइलर को आपको बताना है .. यह नहीं है –

3

आपको एक नई कक्षा बनाना चाहिए जो अपवाद को बढ़ाता है और आपकी त्रुटि के लिए विशिष्ट विवरण प्रदान करता है। उदाहरण के लिए आप EmptyListException नामक एक क्लास बना सकते हैं जिसमें आपकी त्रुटि के बारे में विवरण शामिल है। यह एक बहुत ही सरल अपवाद वर्ग हो सकता है जो कोई कन्स्ट्रक्टर तर्क नहीं लेता है लेकिन स्टैक ट्रेस को कस्टम संदेश प्रदान करने के लिए शायद super("Cannot generate mean for an empty list"); पर कॉल कर सकता है।

कई बार यह पर्याप्त नहीं किया जाता है ... मेरे सबसे नफरत वाले कोड गंधों में से एक तब होता है जब डेवलपर्स एक सामान्य अपवाद (कभी-कभी अपवाद स्वयं) का उपयोग करते हैं और कन्स्ट्रक्टर में एक स्ट्रिंग संदेश पास करते हैं। ऐसा करने से यह वैध है लेकिन आपके कोड को लागू करने वालों की नौकरियां बहुत कठिन होती हैं क्योंकि उन्हें सामान्य अपवाद पकड़ना पड़ता है जब वास्तव में केवल कुछ चीजें हो सकती हैं। अपवादों में समान पदानुक्रम होना चाहिए, जो आप प्रत्येक स्तर के साथ डेटा के लिए उपयोग करते हैं, जो अधिक विशिष्ट विवरण प्रदान करते हैं। अपवाद वर्ग का अधिक विस्तृत विवरण, स्टैक ट्रेस अधिक विस्तृत और उपयोगी है।

मुझे यह साइट मिली है: Exceptional Strategies मेरे अनुप्रयोगों के लिए अपवाद बनाने के दौरान बहुत उपयोगी होने के लिए।

1

एक अंकगणितीय अपवाद के बारे में - रनटाइम फेंकने जैसा ही है।

2

NoSuchElementException के बारे में कैसे। हालांकि अवैध आर्ग्यूमेंट अपवाद बेहतर हो सकता है।

1

क्या आप वर्तमान में कोई अन्य अपवाद फेंक रहे हैं (या योजना बनाना?) पहले उल्लिखित अपवादों में से कोई भी ठीक है, या बस अपना खुद का बनाओ। सबसे महत्वपूर्ण बात यह है कि क्या गलत हुआ संदेश का प्रचार कर रहा है।

यदि कोई मौका है तो अपवाद का 'पकड़ने वाला' इसे फिर से फेंक सकता है, तो आप किसी अन्य अपवाद की जांच करना चाहेंगे, 'पकड़ने वाला' भी फेंक सकता है।

7

अपने आप से पहले पूछने का सवाल यह है कि क्या आपको बिल्कुल फेंकना चाहिए या नहीं, यदि ऐसा है, तो यह एक चेक या अनचेक अपवाद होना चाहिए।

दुर्भाग्य से, वहाँ इन बातों को तय करने पर कोई उद्योग सबसे अच्छा अभ्यास है, क्योंकि इससे StackOverflow जवाब द्वारा दिखाए गए:

  • आपका डिजाइन:

    In Java, when should I create a checked exception, and when should it be a runtime exception?

    फिर भी, कुछ प्रमुख विचार/इस विधि को काम करने के तरीके के बारे में दृष्टि (क्या यह 0-आकार सूची के साथ विधि के लिए उचित/सामान्य है)?

  • वर्ग/पैकेज आपके लागू कोडिंग मानक के साथ

  • के अनुपालन में अन्य तरीकों के साथ संगति (यदि हो तो)

मेरे राय:

  • वापसी Double.NAN या 0 यदि 0-आकार सूची के साथ विधि को कॉल करना उचित/अपेक्षित/सामान्य है, तो मैं समझूंगा साइडर लौटने Double.NAN या 0 यदि 0 आपकी समस्या डोमेन के लिए उपयुक्त है।

  • फेंक एक IllegalArgumentException मेरी डिजाइन का कहना है कि एक खाली सूची के लिए जाँच दृढ़ता से है फोन करने वाले और विधि के लिए दस्तावेज की जिम्मेदारी से यह स्पष्ट है कि यह फोन करने वाले की ज़िम्मेदारी है जा रहा है, तो मैं तो डी मानक अनचेक IllegalArgumentException का उपयोग करें।

  • फेंक एक कस्टम जाँच अपवाद विधि एक आंकड़े पैकेज या लाइब्रेरी का हिस्सा है जहां कई आँकड़े कार्यों एक के लिए संभव खाली डेटा सेट के साथ सौदा करने की आवश्यकता है, तो मुझे लगता है कि हम इस एक अपवाद शर्त यह है कि का एक हिस्सा है समस्या डोमेन। मैं वर्ग/पैकेज/लाइब्रेरी का हिस्सा बनने के लिए एक कस्टम (संभवतः चेक) अपवाद (उदा। EmptyDataSetException) बनाना चाहता हूं और इसे सभी लागू विधियों में उपयोग कर सकता हूं। इसे एक चेक अपवाद बनाकर ग्राहक को इस शर्त को संभालने के तरीके पर विचार करने में मदद मिलती है।

1

मुझे विश्वास नहीं है कि आपको वहां एक अपवाद फेंकना चाहिए; "कुछ नहीं" का औसत "कुछ नहीं" या 0 है यदि आप करेंगे। यदि सेट खाली है, तो आपको बस 0

यदि आपको वास्तव में अपवाद फेंकना चाहिए, तो IllegalStateException या IllegalArgumentException आपके सर्वोत्तम विकल्प हैं।

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