Wie kann eine Java-Methode als veraltet deklariert oder markiert werden?


284

Ich möchte eine meiner Methoden "veraltet" machen = nicht mehr verwendet.

Trotzdem möchte ich es in meiner API haben. Ich möchte nur jedem, der diese Methode verwendet, "Warnung" zeigen.

Wie kann ich das erreichen?


10
Ist @Deprecrated für Sie keine Option?
Templatetypedef

18
Es ist, aber ich wusste es nicht ... deshalb stelle ich die Frage :)
Pavel Janicek


4
Kommentare sind nicht der Ort für Antworten!
Mattumotu

Antworten:


577

Verwenden Sie @Deprecatedauf Methode. Vergessen Sie nicht, das Javadoc-Feld zu klären:

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

2
Wie verknüpft man eine externe Bibliothek? Beispiel: com.hello.api.PublicController # new
Faizan Kazi

@LinuxLars völlig einverstanden! Java 9 fügte ein paar Attribute hinzu, um die Ablehnung ernst zu nehmen, aber das Hinzufügen eines weiteren Attributs reasonmit dem Standardwert von ""konnte nicht schaden
wie am

3
Ich wünschte, die @deprecatedNachricht im Kommentar könnte hinzugefügt werden @Deprecated(ein Punkt, um sie alle zu beheben) ...
U. Windl

88

Verwenden Sie sowohl die @DeprecatedAnnotation als auch das @deprecatedJavaDoc-Tag.

Das @deprecatedJavaDoc-Tag wird zu Dokumentationszwecken verwendet.

Die @DeprecatedAnmerkung weist den Compiler an, dass die Methode veraltet ist. Folgendes steht im Sun / Oracles-Dokument zu diesem Thema:

Durch die Verwendung der @DeprecatedAnnotation zum Verwerfen einer Klasse, Methode oder eines Felds wird sichergestellt, dass alle Compiler Warnungen ausgeben, wenn Code dieses Programmelement verwendet. Im Gegensatz dazu gibt es keine Garantie dafür, dass alle Compiler immer Warnungen basierend auf dem @deprecatedJavadoc-Tag ausgeben , obwohl die Sun-Compiler dies derzeit tun. Andere Compiler geben solche Warnungen möglicherweise nicht aus. Daher ist die Verwendung der @DeprecatedAnmerkung zum Generieren von Warnungen portabler als die Verwendung des @deprecatedJavadoc-Tags.

Das vollständige Dokument finden Sie unter Wie und wann APIs veraltet sind


1
Nicht ganz richtig. Sowohl die Javadoc- als auch die Annotation Tell Compiler-Methode sind veraltet
Bohemian

17
@Bohemian Eigentlich stimmt das nicht ganz. Die Anmerkung wird im Abschnitt 9.6.1.6 der Java-Sprachspezifikation ( java.sun.com/docs/books/jls/third_edition/html/… ) definiert, das Javadoc-Tag jedoch nicht. Die Anmerkung ist also Teil der Sprache. Wenn Sie sich dazu entschließen, einen eigenen Java-Compiler zu schreiben, können Sie das Javadoc-Tag ignorieren, müssen jedoch die Anmerkung erkennen.
ShaMan-H_Fel

@ ShaMan-H_Fel Ich glaube, das Javadoc-Modell funktioniert auch. Weil es vor Java 5 die einzige Wahl war und es funktioniert hat. Wenn Sie eine Methode mit dem @deprecatedJavadoc-Tag (in Java 4) markiert haben, hat der Compiler die Methode (Klasse, Feld) als veraltet markiert und die IDEs haben Warnungen angezeigt, auch wenn keine Quelle verfügbar war.
Amir Pashazadeh

42

da einige kleinere Erklärungen fehlten

Verwenden Sie die @DeprecatedAnnotation für diese Methode

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

Denken Sie daran zu erklären:

  1. Warum wird diese Methode nicht mehr empfohlen ? Welche Probleme treten bei der Verwendung auf? Stellen Sie gegebenenfalls einen Link zur Diskussion zu diesem Thema bereit. (Denken Sie daran, die Zeilen zur besseren Lesbarkeit zu trennen<br/>
  2. Wann wird es entfernt . (Lassen Sie Ihre Benutzer wissen, wie sehr sie sich noch auf diese Methode verlassen können, wenn sie sich für den alten Weg entscheiden.)
  3. Geben Sie eine Lösung oder einen Link zu der von Ihnen empfohlenen Methode an {@link #setPurchasePrice()}

Sollte es nicht <br/> statt </ br> sein?
argh1969

@ argh1969, richtig! Ich kann mich nicht erinnern, woher ich die Vorlage damals habe. Aber ich kann bestätigen, dass beide Versionen funktionieren. Obwohl ich zugunsten von Standards bearbeite.
Azerafati

37

Sie können zwei Dinge tun:

  1. Fügen Sie @Deprecatedder Methode die Anmerkung hinzu, und
  2. Fügen Sie @deprecateddem Javadoc der Methode ein Tag hinzu

Du solltest beides tun !

Zitieren der Java-Dokumentation zu diesem Thema:

Ab J2SE 5.0 wird eine Klasse, Methode oder ein Feld mithilfe der Annotation @Deprecated verworfen. Darüber hinaus können Sie das @deprecated Javadoc-Tag verwenden, um Entwicklern mitzuteilen, was stattdessen verwendet werden soll.

Durch die Verwendung der Annotation generiert der Java-Compiler Warnungen, wenn die veraltete Klasse, Methode oder das veraltete Feld verwendet wird. Der Compiler unterdrückt veraltete Warnungen, wenn eine veraltete Kompilierungseinheit eine veraltete Klasse, Methode oder ein veraltetes Feld verwendet. Auf diese Weise können Sie ältere APIs erstellen, ohne Warnungen zu generieren.

Es wird dringend empfohlen, das Tag Javadoc @deprecated mit den entsprechenden Kommentaren zu verwenden, in denen die Verwendung der neuen API erläutert wird. Dadurch wird sichergestellt, dass Entwickler über einen funktionsfähigen Migrationspfad von der alten API zur neuen API verfügen


Dies bedeutet, dass der Javadoc-Kommentar zusätzlich zur Anmerkung dringend empfohlen wird , nicht als Ersatz! Deshalb ist es immer besser, beides zu sagen.
morellet.d

@ morellet.d Danke, dass du darauf hingewiesen hast. Ich habe meine Antwort jetzt im Grunde umgeschrieben (ich habe das Dokument nicht sorgfältig genug gelesen!). Cheers
Bohemian

8

Verwenden Sie die Anmerkung @Deprecated für Ihre Methode, und Sie sollten sie auch in Ihren Javadocs erwähnen.


Link ist jetzt unterbrochen
Yetti99

3

Schauen Sie sich die @DeprecatedAnmerkung an.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.