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.