2010-06-04 21 views
26

फेंकने के लिए कौन सा अपवाद आपके वर्ग पुस्तकालयों को डिजाइन करने में, जब आप कोई विधि बनाते हैं, तो आप अपवाद फेंकने का निर्णय लेते हैं, या बूलियन लौटते हैं।बूल वापस करने के लिए, एक अपवाद फेंक दें और

उदाहरण के लिए।

public class MathHelper 
{ 
    public int Divide(int x, int y) 
    { 
     if(y == 0) 
     { 
      throw new DivideByZeroException("Cannot Divide by Zero"); 
     } 
     return x/y;  
    } 
} 

यह एक साधारण मामला है, लेकिन फिर आप अधिक जटिल तरीकों को बनाना शुरू करते हैं।

आप कौन सा पसंद करते हैं?

public void Parse(TextReader reader, string delimeter) 
{ 
    if(reader == null) 
    { 
     throw new ArgumentNullException("The reader cannot be null"); 
    } 
    if(String.IsNullOrEmpty(delimeter)) 
    { 
     throw new ArgumentNullException("The delimeter cannot be null"); 
    } 
} 

public bool Parse(TextReader reader, string delimeter) 
{ 
    if(reader == null) 
    { 
     logger.Error("Parse failed with null reader"); 
     return false; 
    } 
    if(String.IsNullOrEmpty(delimeter)) 
    { 
     logger.Error("Parse failed with null delimeter"); 
     return false; 
    } 
} 

उत्तर

29
  • अपवाद आम तौर पर चीजें जहां विफलता एक विकल्प के रूप की उम्मीद नहीं है के लिए जाने का रास्ता है।

  • बूलियन रिटर्न वैल्यू उन चीज़ों के लिए जाने का तरीका है जहां विफलता कभी-कभी अपेक्षित परिणाम हो सकती है।

इस प्रकार, आपके उदाहरणों में मैं अपवादों के साथ कहूंगा।

https://docs.oracle.com/javase/8/docs/technotes/guides/language/assert.html#preconditions

है यही कारण है कि, एक अपवाद बढ़ा यदि यह सार्वजनिक हो, और जोर का उपयोग निजी होने पर:

6

जावा प्रलेखन कुछ मानक तरीका पूर्व शर्त की जाँच करने के बारे में क्या कहना है।

+0

मुझे वास्तव में यह जवाब पसंद है, क्योंकि यदि आप इसे केवल अपने आंतरिक पुस्तकालयों के लिए उपयोग करते हैं, तो अपवाद फेंकना महंगा है। –

+0

दस्तावेज़ों का दिया गया लिंक टूटा हुआ है। – chammu

+0

@chammu मैं आम तौर पर इसे एक्सेस कर सकता हूं। – KnorxThieus

1

मुझे आपके उदाहरण में जो कुछ पूछ रहा है, वह सी # पसंद करता है। आप एक विधि (int.Parse) प्राप्त कर सकते हैं जो एक पूर्णांक देता है, या त्रुटि पर फेंकता है। आपके पास एक विधि भी है (int.TryParse) जो पूर्णांक मान के साथ एक आपूर्ति द्वारा संदर्भ तर्क को पॉप्युलेट करता है, और एक बुलियन स्थिति कोड देता है। इस तरह, यदि आप प्राप्त करने और अपवाद के लिए चाहते हैं, तो आप करते हैं। यदि आप एक सशर्त उपयोग करके एक त्रुटि इनलाइन को संभालना चाहते हैं, तो यह भी एक विकल्प है। (चयनित)

0

जबकि स्वीकार किए जाते हैं जवाब कुछ अच्छी सामान्य सलाह है, कुछ मामलों मैं पसंद कर रहे हैं अपवाद भी जब बूलियन विधि योग्य है:

  • (उम्मीद) विफलताओं जो अलग से निपटने की आवश्यकता के विभिन्न प्रकार। विकल्प इंट स्टेटस कोड हैं जिन्हें उपयुक्त स्थिरांक और स्टेटस कोड एनम्स की आवश्यकता होती है जो एक बेहतर हो सकती है लेकिन अभी भी स्पष्ट जांच की आवश्यकता है।

  • अपवाद प्रचार। कभी-कभी आप मॉडल परत पर विफलता का पता लगाते हैं, लेकिन केवल इसे दृश्य में संभाल सकते हैं, जो श्रृंखला में है। इसलिए, सभी कार्यों को बुलियन लौटने और वापसी मूल्य का प्रचार करने के बजाय, अपवादों का डिफ़ॉल्ट व्यवहार का उपयोग करें और उन्हें शीर्षतम परत में पकड़ें।

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