क्या जावा में .NET के NotImplementedException जैसी कोई चीज़ है?


जवाबों:


516

कॉमन्स लैंग के पास है। या आप एक फेंक सकते हैं UnsupportedOperationException


26
ऐसा प्रतीत होता है कि NotImplementedException को Commons Lang 3.0 से हटा दिया गया है।
माइकल यूंकिन

13
मुझे लगता है कि चूंकि UnsupportedOperationException संग्रह फ्रेमवर्क का हिस्सा है, इसका उपयोग केवल तभी किया जाना चाहिए जब इसे संग्रह के संदर्भ में उपयोग किया जाता है। अन्यथा एक RuntimeException का उपयोग किया जाना चाहिए। docs.oracle.com/javase/7/docs/technotes/guides/collections/…
L.Butz

9
@LeonardButz यह java.lang से आता है: docs.oracle.com/javase/1.5.0/docs/api/java/lang/…
रवि

5
@RaviWallau मैंने यह देखा: docs.oracle.com/javase/7/docs/api/java/lang/… इस वर्ग जावा संग्रह फ्रेमवर्क का एक सदस्य है कि वहाँ खड़ा है।
एल। बुत्ज़

3
यह कॉमन्स लैंग 3.2 में पढ़ा गया है: commons.apache.org/proper/commons-lang/javadocs/api-3.2
qwertzguy

289

मुझे लगता है कि वही java.lang.UnsupportedOperationExceptionहै जो आप ढूंढ रहे हैं।


28
मैं कहता हूं कि यह काफी अलग है। एनआईई यह भी बताता है कि यह अभी तक लागू नहीं हो सकता है, जहां यूओई कहता है कि यह मुझे कभी नहीं होगा ...
डाइकैम

5
@Dykam, तो यह एक NotImplementedYetException नहीं होगा?
यिशई

106
@ डीकम: new UnsupportedOperationException("Not implemented yet")- खुश?
माइकल बोर्गवर्ड

3
मेरा मतलब यह नहीं था कि यह बदतर था, बस एक अलग उपयोग मामला था।
डाइकम

6
नया UnsupportedOperationException ("अभी तक लागू नहीं हुआ") एक भयानक विचार है! :) lang3 में किसी कारण से मेरे पास NotImplementedException नहीं है इसलिए यह एक बढ़िया उपाय है
ufk

55

आप इसे स्वयं कर सकते हैं (यानी मैंने क्या किया है) - अपवाद से निपटने के लिए परेशान नहीं होने के लिए, आप बस रनटाइम एक्सेप्शन का विस्तार करते हैं, आपकी कक्षा कुछ इस तरह दिख सकती है:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

आप एक संदेश लेने के लिए इसे बढ़ा सकते हैं - लेकिन यदि आप विधि का उपयोग करते हैं जैसा कि मैं करता हूं (अर्थात, एक अनुस्मारक के रूप में, कि अभी भी कुछ लागू होना है), तो आमतौर पर अतिरिक्त संदेशों की कोई आवश्यकता नहीं है।

मैं यह कहने की हिम्मत करता हूं, कि मैं केवल इस पद्धति का उपयोग करता हूं, जबकि मैं एक प्रणाली विकसित करने की प्रक्रिया में हूं, इससे मेरे लिए यह आसान हो जाता है कि मैं उन तरीकों पर नजर न रखूं, जो अभी भी ठीक से लागू नहीं हुई हैं :)


3
मुझे यह समाधान सबसे अच्छा लगता है क्योंकि इसके लिए एक विशेष त्रुटि हैंडलर होना आसान है, यह NotImforceedException constructor के सभी संदर्भों को खोजकर इसे खोजना आसान है, और यह कोड की कुछ पंक्तियाँ हैं। लेकिन नई कक्षा को अपनी फ़ाइल के साथ घोषित करना थोड़ा असुविधाजनक है।
डी कोएट्जी

1
मैं सहमत हूँ। यह UnsupportedOperationExceptionमेरी राय में उपयोग से बेहतर है । अब, केवल जावा अपवादों के सामान्य पुस्तकालय में इसे जोड़ देगा!
क्रश करें

12

जैसा कि उल्लेख किया गया है, जेडीके के पास एक करीबी मैच नहीं है। हालांकि, मेरी टीम को कभी-कभी इस तरह के अपवाद के लिए भी उपयोग किया जाता है। हम UnsupportedOperationExceptionअन्य उत्तरों के अनुसार सुझाव दे सकते हैं, लेकिन हम अपने बेस लाइब्रेरी में कस्टम अपवाद वर्ग को पसंद करते हैं, जिसमें बिल्डरों को हटा दिया गया है:

public class NotYetImplementedException extends RuntimeException
{
    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException()
    {
    }

    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException(String message)
    {
        super(message);
    }
}

इस दृष्टिकोण के निम्नलिखित लाभ हैं:

  1. जब पाठक देखते हैं NotYetImplementedException, वे जानते हैं कि एक कार्यान्वयन की योजना बनाई गई थी और या तो भूल गई थी या अभी भी प्रगति पर है, जबकि UnsupportedOperationExceptionकहते हैं ( संग्रह अनुबंधों के अनुरूप ) कि कुछ कभी भी लागू नहीं होगा। इसलिए हमारे पास वर्ग नाम में "अभी तक" शब्द है। इसके अलावा, एक आईडीई आसानी से कॉल साइटों को सूचीबद्ध कर सकता है।
  2. प्रत्येक कॉल साइट पर पदावनति की चेतावनी के साथ, आपका आईडीई और स्टेटिक कोड विश्लेषण उपकरण आपको याद दिला सकता है कि आपको अभी भी कुछ लागू करना है। (डिप्रेसेशन का यह उपयोग कुछ के लिए गलत लग सकता है, लेकिन वास्तव में डिप्रेसेशन हटाने की घोषणा तक सीमित नहीं है ।)
  3. कंस्ट्रक्टर पदावनत हैं, वर्ग नहीं। इस तरह, आपको केवल उस पद्धति के अंदर एक पदावनति की चेतावनी मिलती है जिसे लागू करने की आवश्यकता होती है, न कि importलाइन पर (JDK 9 ने इसे ठीक किया , हालांकि)।

8

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

कृपया इस चर्चा का संदर्भ लें कि यह .NET में भी क्यों है।

मुझे लगता UnsupportedOperationExceptionहै कि करीब आता है, हालांकि यह नहीं कहता है कि ऑपरेशन अभी लागू नहीं हुआ है, लेकिन असमर्थित भी। इसका मतलब यह है कि कोई भी वैध कार्यान्वयन संभव नहीं है। ऑपरेशन असमर्थित क्यों होगा? क्या यह भी होना चाहिए? इंटरफ़ेस अलगाव या Liskov प्रतिस्थापन मुद्दों हो सकता है?

यदि यह प्रगति का काम है तो मैं इसके लिए तैयार हो जाऊंगा ToBeImplementedException, लेकिन मैंने कभी खुद को एक ठोस विधि को परिभाषित करते हुए नहीं पकड़ा है और फिर इसे इतने लंबे समय के लिए छोड़ देता हूं कि यह उत्पादन में बदल जाता है और इस तरह के अपवाद की आवश्यकता होगी।

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