समर्थित / कार्यान्वित संचालन के लिए जावा में फेंकने के लिए मानक अपवाद क्या है?


308

विशेष रूप से, क्या Exceptionइन परिस्थितियों में एक मानक उपवर्ग का उपयोग किया जाता है?


क्या यह उपयोग करने के लिए उपयुक्त है जब एक वर्ग एक विधि को लागू नहीं करता है, लेकिन बाल कक्षाएं ऐसा कर सकती हैं? दूसरे शब्दों में, एक गैर-अमूर्त वर्ग में एक सार पद्धति है।
osa

@SergeyOrshanskiy यह तब उपयोगी है जब आप किसी वस्तु का निर्माण कैसे करते हैं, इस पर निर्भर करते हुए, आपको एक अनाम वर्ग बनाने की आवश्यकता होती है, जो एक सदस्य चर को त्वरित करने के लिए एक इंटरफ़ेस लागू करता है, लेकिन आप इसका उपयोग नहीं करना चाहते हैं। यदि आप इसे सेट करते हैं nullऔर आपने गलती से इसका उपयोग किया है (या किसी और ने) तो आपको मिलेगा NullPointerExceptionsजो UnsupportedOperationExceptionsइस मामले में कम स्पष्ट है । बस एक उदाहरण है।
2rs2ts

जवाबों:


438

java.lang.UnsupportedOperationException

यह दर्शाने के लिए कि अनुरोधित ऑपरेशन समर्थित नहीं है।


4
@JarrodRoberson ठीक है, उस बयान को वास्तव में उस मामले में वर्ग प्रलेखन से हटा दिया जाना चाहिए। अपवाद अन्य संकुल द्वारा उपयोग किया जा रहा है। मुझे लगता है कि यदि ओरेकल ऐसा करता है, तो हमें ऐसा करना चाहिए। मैं एक बग रिपोर्ट दर्ज करूंगा।
मार्टन बोडेवेस

1
ध्यान रहे यह अनियंत्रित है RuntimeException । आपको संकलन समय के दौरान इन अपवादों से निपटने के लिए कोई प्रतिक्रिया या सहायता नहीं मिलेगी। यदि यह एक स्टब्ड विधि या कार्य-प्रगति के लिए उपयोग किया जाता है, तो आपको कुछ प्रकार के चेक किए गए अपवाद का उपयोग करना चाहिए ।
18 अक्टूबर को स्वादिष्ट

221

आपके द्वारा नामित दो मामलों में अंतर:

  • यह इंगित करने के लिए कि अनुरोधित ऑपरेशन समर्थित नहीं है और सबसे अधिक संभावना कभी नहीं होगी, एक फेंक दें UnsupportedOperationException

  • अनुरोधित ऑपरेशन को लागू करने के लिए अभी तक लागू नहीं किया गया है, यह इंगित करने के लिए:

    1. का प्रयोग करें NotImplementedExceptionसे Apache Commons-लैंग जो कॉमन्स-lang2 में उपलब्ध था और किया गया संस्करण 3.2 की कॉमन्स-lang3 के लिए फिर से जोड़ा गया है।

    2. अपने खुद के लागू करें NotImplementedException

    3. UnsupportedOperationException"लागू नहीं, फिर भी" जैसे संदेश के साथ फेंक दें ।


1
मैं इसके साथ जा रहा हूं, क्योंकि यह मुझे उचित लगता है। अपवाद द्वारा इंगित "फिर भी" या "कभी नहीं" इस पर प्रतिक्रिया करने के तरीके पर एक विचार देता है।
sschrass

3
# 1 या 2 अभ्यास में बहुत बेहतर हैं। # 3 "समर्थित नहीं" और "लागू नहीं" के बीच शब्दार्थ भेद को पकड़ता है, लेकिन एक अलग वर्ग होने से यह सत्यापित करने के लिए एक त्वरित खोज करना आसान हो जाता है कि आप कुछ भी लागू करने से पहले भूल नहीं करना चाहिए।
शॉन यू

4
# 3 लागू नहीं किए गए तरीकों के लिए सबसे अच्छा है क्योंकि इसके लिए किसी थर्ड पार्टी लाइब्रेरी या अतिरिक्त काम की आवश्यकता नहीं है, भले ही यह कॉमन्स-लैंग हो।
जोशीडीएम

28

यदि आप NetBeans में एक नया (अभी तक कार्यान्वित नहीं किया गया है) फ़ंक्शन बनाते हैं , तो यह निम्नलिखित कथन के साथ एक विधि निकाय बनाता है:

throw new java.lang.UnsupportedOperationException("Not supported yet.");

इसलिए, मैं UnsupportedOperationException का उपयोग करने की सलाह देता हूं ।


14

यदि आप अधिक ग्रैन्युलैरिटी और बेहतर डिक्लेरेशन चाहते हैं, तो आप कॉमन-लैंग से NotImplementedException का उपयोग कर सकते हैं

चेतावनी: संस्करण २.६ से पहले और संस्करण ३.२ के बाद ही उपलब्ध है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.