कैसे घोषित या जावा विधि को पदावनत किया जाए?


284

मैं अपनी एक विधि "पदावनत" करना चाहूँगा = जिसका अब उपयोग न हो।

लेकिन फिर भी मैं इसे अपने एपीआई में रखना चाहूंगा। मैं सिर्फ उस पद्धति का उपयोग करके किसी को "चेतावनी" दिखाना चाहता हूं।

मैं उसे कैसे प्राप्त कर सकता हूं?


10
क्या @Deprecrated आपके लिए विकल्प नहीं है?
templatetypedef

18
यह है, लेकिन मुझे इसके बारे में पता नहीं था ... यही कारण है कि मैं सवाल पूछ रहा हूं :)
पावेल जेनिसक


4
टिप्पणियों के जवाब के लिए जगह नहीं है!
मट्टूमोतु

जवाबों:


577

@Deprecatedविधि पर प्रयोग करें । जावास्क्रिप्ट क्षेत्र स्पष्ट करने के बारे में मत भूलना:

/**
 * Does some thing in old style.
 *
 * @deprecated use {@link #new()} instead.  
 */
@Deprecated
public void old() {
// ...
}

2
आप बाहरी लाइब्रेरी को कैसे लिंक करते हैं? जैसे: com.hello.api.PublicController # new
Faizan Kazi

@LinuxLars पूरी तरह से सहमत! जावा 9 में कुछ विशेषताओं को जोड़ा गया है जिससे reason""
पदावनति

3
मैं चाहता हूं कि @deprecatedटिप्पणी में संदेश @Deprecated(सभी को ठीक करने के लिए एक स्थान) को जोड़ा जा सकता है ...
यू। विंडल

88

@Deprecatedएनोटेशन और @deprecatedJavaDoc टैग दोनों का उपयोग करें ।

@deprecatedJavaDoc टैग प्रलेखन प्रयोजनों के लिए प्रयोग किया जाता है।

@Deprecatedएनोटेशन संकलक कि विधि बहिष्कृत है निर्देश देता है। यह इस विषय पर सन / ओराक्लेस दस्तावेज़ में क्या कहता है:

@Deprecatedकिसी वर्ग, विधि या क्षेत्र को हटाने के लिए एनोटेशन का उपयोग करना सुनिश्चित करता है कि सभी कंपाइलर उस प्रोग्राम एलिमेंट का उपयोग करते समय चेतावनी जारी करेंगे। इसके विपरीत, इस बात की कोई गारंटी नहीं है कि सभी कंपाइलर हमेशा @deprecatedजावाडॉक टैग के आधार पर चेतावनी जारी करेंगे , हालांकि वर्तमान में सन कंपाइलर ऐसा करते हैं। अन्य संकलक इस तरह की चेतावनी जारी नहीं कर सकते हैं। इस प्रकार, @Deprecatedचेतावनी उत्पन्न करने के लिए एनोटेशन का उपयोग करना अधिक पोर्टेबल है जो कि @deprecatedजावाडॉक टैग पर निर्भर है ।

आप एपीआई को कैसे और कब डिप्रेस करें , इसका पूरा दस्तावेज देख सकते हैं


1
बिल्कुल सच नहीं है। दोनों जावाडोक और एनोटेशन बताई संकलक विधि बहिष्कृत हो गई है
बोहेमियन

17
@ बोहेमियन वास्तव में यह बिल्कुल सच नहीं है। एनोटेशन जावा भाषा विनिर्देश खंड 9.6.1.6 ( java.sun.com/docs/books/jls/third_edition/html/… ) में परिभाषित किया गया है , जबकि javadoc टैग नहीं है। तो एनोटेशन भाषा का हिस्सा है। यदि आप अपना स्वयं का जावा कंपाइलर लिखने का निर्णय लेते हैं, तो आप javadoc टैग को अनदेखा कर सकते हैं, लेकिन आपको एनोटेशन को पहचानना होगा।
शाममन-एच_फेल २ 27'१२

@ ShaMan-H_Fel मेरा मानना ​​है कि javadoc मॉडल भी काम करता है। क्योंकि यह जावा 5 से पहले एकमात्र विकल्प था, और इसने काम किया। जब आपने @deprecatedजावाडॉक टैग (जावा 4- में) के साथ एक विधि को चिह्नित किया, तो संकलक ने विधि (वर्ग, क्षेत्र) को पदावनत के रूप में चिह्नित किया और आईडीई ने चेतावनी दी, तब भी जब कोई स्रोत उपलब्ध नहीं था।
अमीर पसज़ादेह

42

चूंकि कुछ मामूली स्पष्टीकरण गायब थे

@Deprecatedइस तरह विधि पर एनोटेशन का उपयोग करें

 /**
 * @param basePrice
 * 
 * @deprecated  reason this method is deprecated <br/>
 *              {will be removed in next version} <br/>
 *              use {@link #setPurchasePrice()} instead like this: 
 * 
 * 
 * <blockquote><pre>
 * getProduct().setPurchasePrice(200) 
 * </pre></blockquote>
 * 
 */
@Deprecated
public void setBaseprice(int basePrice) {
}

व्याख्या करना याद रखें:

  1. इस विधि की अब सिफारिश क्यों नहीं की जाती है । इसका उपयोग करते समय क्या समस्याएं आती हैं। यदि कोई हो, तो मामले पर चर्चा के लिए एक लिंक प्रदान करें। (पठनीयता के लिए अलग लाइनों को याद रखें<br/>
  2. जब इसे हटाया जाएगा । (अपने उपयोगकर्ताओं को बताएं कि वे अभी भी इस पद्धति पर कितना भरोसा कर सकते हैं यदि वे पुराने तरीके से चिपके रहने का निर्णय लेते हैं)
  3. आपके द्वारा सुझाई गई विधि का समाधान या लिंक प्रदान करें{@link #setPurchasePrice()}

क्या यह ब्रीफ़ेबल के बजाय <br/> नहीं होना चाहिए?
argh1969

@ argh1969, सही है! याद नहीं है कि मैं कहाँ से वापस तो टेम्पलेट मिला है। लेकिन मैं दोनों संस्करणों के काम की पुष्टि कर सकता हूं। हालांकि मैं मानकों के पक्ष में संपादन कर रहा हूं।
अजराफती

37

आप कर सकते हैं दो चीजें हैं:

  1. जोड़ें @Deprecatedविधि एनोटेशन , और
  2. @deprecatedविधि के javadoc में एक टैग जोड़ें

आपको दोनों करना चाहिए !

इस विषय पर जावा प्रलेखन का हवाला देते हुए :

J2SE 5.0 के साथ शुरू, आप @Deprecated एनोटेशन का उपयोग करके एक वर्ग, विधि या क्षेत्र को दर्शाते हैं। इसके अतिरिक्त, आप @deprecated Javadoc टैग डेवलपर्स को बता सकते हैं कि इसके बजाय क्या उपयोग करना है।

एनोटेशन का उपयोग जावा कंपाइलर को तब उत्पन्न करने के लिए चेतावनी उत्पन्न करता है जब पदावनत वर्ग, विधि या क्षेत्र का उपयोग किया जाता है। कंपाइलर डिप्रेसेशन चेतावनियों को दबा देता है अगर एक डीग्रेडेड कॉम्पटिशन यूनिट एक डिप्रेस्ड क्लास, मेथड या फील्ड का उपयोग करता है। यह आपको चेतावनी पैदा किए बिना विरासत एपीआई बनाने में सक्षम बनाता है।

आपको जावाडॉक @deprecated टैग का उपयोग करने के लिए दृढ़ता से अनुशंसा की जाती है, जिसमें उपयुक्त टिप्पणियां बताई गई हैं कि नए एपीआई का उपयोग कैसे करें। यह सुनिश्चित करता है कि डेवलपर्स के पास पुराने एपीआई से नई एपीआई तक एक काम करने योग्य प्रवासन पथ होगा


इसका अर्थ है कि टिप्पणी के रूप में जेवार्डोक टिप्पणी की जोरदार सिफारिश की जाती है , न कि प्रतिस्थापन के रूप में! इसीलिए दोनों को रखना हमेशा बेहतर होता है।
morellet.d

@ morellet.d इसे इंगित करने के लिए धन्यवाद। मैंने मूल रूप से अपना उत्तर अब फिर से लिखा है (मैंने डॉक्टर को ध्यान से नहीं पढ़ा!)। चीयर्स
बोहेमियन


3

@Deprecatedएनोटेशन पर एक नज़र डालें ।

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