2011-08-28 19 views
19

मैं एक एपीआई के साथ काम कर रहा हूं जो सत्य होने पर सही होने का दावा करता है, और अगर यह विफल रहता है तो झूठा। लेकिन, यह विफल होने पर अलग-अलग अपवादों को फेंकने का भी दावा करता है। यह झूठी वापसी कैसे कर सकता है और अपवाद फेंक सकता है?एक मूल्य लौटें और एक अपवाद फेंक दें?

उत्तर

25

दोनों अपवाद फेंकना और एक फ़ंक्शन कॉल से मूल्य वापस करना संभव नहीं है।

शायद यह कोई त्रुटि होने पर false लौटने जैसा कुछ करता है, लेकिन इनपुट अमान्य होने पर अपवाद फेंकना है।

संपादित करें: PaulPRO एक (अब हटाए) जवाब ओर इशारा करते हुए यह तकनीकी रूप से संभव पैदा करने के लिए एक अपवाद है, एक अलग धागे में फेंक दिया है, जबकि वर्तमान में एक मूल्य लौटने है कि पोस्ट। मैंने सोचा कि यह ध्यान देने योग्य था, भले ही यह ऐसा कुछ न हो जिसे आपको कभी देखना चाहिए।

+0

जो मैंने पाया था। मैंने सोचा कि अंततः ब्लॉक के साथ कुछ चाल हो सकती है। – mark

+0

एक बार अपवाद को फेंकने के बाद आपका प्रोग्राम चलना बंद कर देता है तो इमोहो दोनों करना असंभव है। मुझे आश्चर्य है कि क्या आपके पास 'प्रयास' ब्लॉक में रिटर्न स्टेटमेंट है, क्या प्रोग्राम अभी भी 'अंतिम' ब्लॉक पास करता है, क्योंकि यदि आप कोशिश ब्लॉक में एक मान वापस कर देंगे और अंतिम ब्लॉक में अपवाद फेंक देंगे तो आप करेंगे दोनों ने किया है .. –

+2

@ करेल-जन मिस्सेगर्स: नहीं, जावा में आपका प्रोग्राम ** निश्चित रूप से ** अपवाद को फेंकने के बाद चलना बंद नहीं करता है। आप इस बात से उलझन में हैं कि जावा अपवाद कैसे काम करते हैं और स्पष्ट रूप से अभी तक कोई बहु-थ्रेडेड जावा प्रोग्रामिंग नहीं किया है। जब आप किसी अन्य थ्रेड में अनचेक अपवाद होता है तो आपके पास बहुत सारे थ्रेड काम कर सकते हैं। ऐसे कई मामले हैं जहां मरने वाले थ्रेड को स्वचालित रूप से पुनरारंभ किया जाता है (कुछ ओएस/जेवीएम पर सबसे प्रसिद्ध स्विंग के ईडीटी हैं: यदि ईडीटी मर जाता है, तो एक नया ईडीटी पुनरारंभ होता है)। – SyntaxT3rr0r

14

आप एक अपवाद है कि एक (इस मामले बूलियन में) है मूल्य फेंक कर सकते हैं:

public class ValueException extends Exception { 
    final boolean value; 

    public ValueException(boolean value, String message) { 
     super(message); 
     this.value = value; 
    } 

    public boolean getValue() { 
     return value; 
    } 
} 
0

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

मुझे इस एपीआई पर प्रलेखन के लिए एक लिंक देखना अच्छा लगेगा। एपीआई को स्पष्टता पर प्राथमिकता दी जानी चाहिए। अपवाद फेंकना और मूल्य लौटने से सवाल उठता है कि वापस लौटाया गया मूल्य उपयोग करने के लिए सुरक्षित है या यदि यह अमान्य है।

याद रखें, ब्लॉक को आज़माएं/पकड़ें अपवादों को संभालने की दूसरी विधि हैं। वे कॉलिंग विधि के अपवाद को पास नहीं करते हैं, लेकिन इसे आंतरिक रूप से इस तरह से संभालते हैं कि डेवलपर उपयुक्त मानता है।

यदि, डीबगिंग उद्देश्यों के लिए, आपको अपवाद के मामले में परिणामस्वरूप मूल्य देखना होगा, तो बोहेमियन का विचार अच्छी तरह से काम करता है।

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