Come dichiarare o contrassegnare un metodo Java come obsoleto?


284

Vorrei rendere uno dei miei metodi "deprecato" = non più utilizzato.

Ma vorrei comunque averlo nella mia API. Voglio solo mostrare "avvertimento" a chiunque usi quel metodo.

Come posso raggiungerlo?


10
@Deprecrated non è un'opzione per te?
templatetypedef

18
Sì, ma non lo sapevo ... ecco perché sto ponendo la domanda :)
Pavel Janicek,


4
i commenti non sono il posto giusto per le risposte!
Mattumotu,

Risposte:


578

Utilizzare @Deprecatedil metodo Non dimenticare di chiarire il campo javadoc:

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

2
Come si collega una libreria esterna? ad es .: com.hello.api.PublicController # new
Faizan Kazi

@LinuxLars completamente d'accordo! Java 9 ha aggiunto un paio di attributi per iniziare a prendere sul serio la deprecazione ma l'aggiunta di un altro attributo reasoncon un valore predefinito ""non avrebbe potuto far male
asgs

3
Vorrei che il @deprecatedmessaggio nel commento potesse essere aggiunto a @Deprecated(un punto per risolverli tutti) ...
U. Windl

88

Utilizzare sia l' @Deprecatedannotazione che il @deprecatedtag JavaDoc.

Il @deprecatedtag JavaDoc viene utilizzato a scopo di documentazione.

L' @Deprecatedannotazione indica al compilatore che il metodo è obsoleto. Ecco cosa dice nel documento Sole / Oracoli sull'argomento:

L'uso @Deprecateddell'annotazione per deprecare una classe, un metodo o un campo garantisce che tutti i compilatori emettano avvisi quando il codice utilizza quell'elemento del programma. Al contrario, non vi è alcuna garanzia che tutti i compilatori emetteranno sempre avvisi basati sul @deprecatedtag Javadoc, anche se attualmente i compilatori Sun lo fanno. Altri compilatori non possono emettere tali avvisi. Pertanto, l'utilizzo @Deprecateddell'annotazione per generare avvisi è più portabile che basarsi sul @deprecatedtag Javadoc.

Puoi trovare il documento completo in Come e quando disapprovare le API


1
Non del tutto vero. Sia javadoc che le annotazioni dicono che il metodo del compilatore è deprecato
Boemo

17
@Bohemian In realtà non è del tutto vero. L'annotazione è definita nella sezione 9.6.1.6 di Java Language Specification ( java.sun.com/docs/books/jls/third_edition/html/… ), mentre il tag javadoc non lo è. Quindi l'annotazione fa parte della lingua. Se decidi di scrivere il tuo compilatore Java, puoi ignorare il tag javadoc, ma devi riconoscere l'annotazione.
ShaMan-H_Fel

@ ShaMan-H_Fel Credo che anche il modello javadoc funzioni. Perché era l'unica scelta prima di Java 5 e funzionava. Quando hai contrassegnato un metodo con @deprecatedtag javadoc (in Java 4-), il compilatore ha contrassegnato il metodo (classe, campo) come obsoleto e gli IDE hanno mostrato degli avvisi, anche quando non era disponibile alcuna fonte.
Amir Pashazadeh,

42

poiché mancavano alcune spiegazioni minori

Usa l' @Deprecatedannotazione sul metodo in questo modo

 /**
 * @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) {
}

ricordati di spiegare:

  1. Perché questo metodo non è più raccomandato . Quali problemi sorgono quando lo si utilizza. Fornire un collegamento alla discussione sull'eventuale questione. (ricorda di separare le righe per leggibilità<br/>
  2. Quando verrà rimosso . (fai sapere ai tuoi utenti quanto possono ancora fare affidamento su questo metodo se decidono di attenersi alla vecchia maniera)
  3. Fornire una soluzione o un collegamento al metodo consigliato {@link #setPurchasePrice()}

Non dovrebbe essere <br/>, anziché </br>?
argh1969,

@ argh1969, giusto! non ricordo da dove ho preso il modello da allora. Ma posso confermare che entrambe le versioni funzionano. Anche se sto modificando a favore degli standard.
Azerafati,

37

Ci sono due cose che puoi fare:

  1. Aggiungi l' @Deprecatedannotazione al metodo e
  2. Aggiungi un @deprecatedtag al javadoc del metodo

Dovresti fare entrambe le cose !

Citando la documentazione java su questo argomento:

A partire da J2SE 5.0, si depreca una classe, un metodo o un campo utilizzando l'annotazione @Deprecated. Inoltre, puoi usare il tag Javadoc @deprecated per dire agli sviluppatori cosa usare invece.

L'uso dell'annotazione fa sì che il compilatore Java generi avvisi quando viene utilizzata la classe, il metodo o il campo deprecati. Il compilatore elimina gli avvisi di deprecazione se un'unità di compilazione deprecata utilizza una classe, un metodo o un campo deprecati. Ciò consente di creare API legacy senza generare avvisi.

Si consiglia vivamente di utilizzare il tag Javadoc @deprecated con commenti appropriati che spiegano come utilizzare la nuova API. Ciò garantisce agli sviluppatori un percorso di migrazione praticabile dalla vecchia API alla nuova API



3

Dai un'occhiata @Deprecatedall'annotazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.