2010-04-02 34 views
16

के साथ अपवाद को वापस करने के लिए अपवाद फेंकना तो मेरे पास ऐसा कार्य है जो दिए गए एनम डेटटाइप {वर्तमान, स्टार्ट, ईएनडी} पर कॉल करने के लिए एक तिथि स्वरूपित करता है स्विच स्विच स्टेटमेंट का उपयोग करने वाले मामलों के साथ रिटर्न वैल्यू को संभालने का सबसे अच्छा तरीका क्या होगास्विच स्टेटमेंट

public static String format(Date date, DateType datetype) { 
    ..validation checks 

    switch(datetype){ 
    case CURRENT:{ 
     return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss"); 
    }    
    ... 
    default:throw new ("Something strange happend"); 
    } 

} 

या अंत

public static String format(Date date, DateType datetype) { 
      ..validation checks 

      switch(datetype){ 
      case CURRENT:{ 
       return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss"); 
      }    
      ... 
      } 

       //It will never reach here, just to make compiler happy 
     throw new IllegalArgumentException("Something strange happend");  
     } 

पर excpetion फेंक या वापसी अशक्त

public static String format(Date date, DateType datetype) { 
      ..validation checks 

      switch(datetype){ 
      case CURRENT:{ 
       return getFormattedDate(date, "yyyy-MM-dd hh:mm:ss"); 
      }    
      ... 
      } 

      return null; 
} 

यहां सबसे अच्छा अभ्यास क्या होगा? इसके अलावा सभी enum मानों को केस स्टेटमेंट

+1

यदि आपके पास ऐसी स्थिति है जो कभी नहीं होनी चाहिए तो मैं एक AssertionError का उपयोग करूंगा। –

+0

धन्यवाद AssertionError स्विच बयान के बाहर अपवाद फेंक एक संकलन चेतावनी अगर आप स्विच में मामलों के रूप में enum मूल्यों के सभी शामिल नहीं किया है की अनुमति देगा IllegalArgumentException – Greg

उत्तर

18

अपवाद फेंक दिया जाएगा, क्योंकि यह एक असाधारण मामला है।

और switch बाहर फेंक, यह अधिक से पढ़े जा सकेंगे। अन्यथा ऐसा लगता है जैसे "डिफ़ॉल्ट मामला असाधारण है"।

+7

साथ ही अधिक से अधिक समझ में आता है, (या enum बाद में विस्तार किया गया है) । – ILMTitan

1

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

1

अपवाद, के रूप में आप एक ही वापसी कर सकते हैं पूर्णांक से माता-पिता की आज्ञा का पालन करने के लिए और अधिक कर सकते हैं। आम तौर पर आप अपवादों का उपयोग करते हैं जहां वे मौजूद हैं (सी ++), और मूल्यों को वापस करें जहां (सी) नहीं है।

9

मुझे लगता है कि सबसे अच्छा throw new IllegalArgumentException("Something strange happend") व्यवहार है।

null का उपयोग सिर्फ presumibly एक NullPointerException कहीं कारण जब आप वापसी मान का उपयोग, लेकिन यह एक विशिष्ट अपवाद जो समस्या का वर्णन ऊपर उठाने से कम जानकारीपूर्ण होगा!

और आप जानते हैं: स्पष्ट त्रुटियां = बेहतर विकास।

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