Java @Deprecated Annotation

1. Übersicht

In diesem kurzen Tutorial sehen wir uns veraltete APIs in Java und die Verwendung der Annotation @Deprecated an .

2. Die @ Veraltete Anmerkung

Während sich ein Projekt weiterentwickelt, ändert sich seine API. Im Laufe der Zeit gibt es bestimmte Konstruktoren, Felder, Typen oder Methoden, die die Benutzer nicht mehr verwenden sollen.

Anstatt die Abwärtskompatibilität der Projekt-API zu beeinträchtigen , können wir diese Elemente mit der Annotation @Deprecated versehen .

@Deprecated teilt anderen Entwicklern mit, dass das markierte Element nicht mehr verwendet werden soll . Es ist üblich, neben derAnnotation @Deprecated auch Javadoc hinzuzufügen , um zu erklären, was eine bessere Alternative wäre, die dem richtigen Verhalten dient:

public class Worker { /** * Calculate period between versions * @deprecated * This method is no longer acceptable to compute time between versions. * 

Use {@link Utils#calculatePeriod(Machine)} instead. * * @param machine instance * @return computed time */ @Deprecated public int calculate(Machine machine) { return machine.exportVersions().size() * 10; } }

Denken Sie daran, dass ein Compiler die veraltete API-Warnung nur anzeigt, wenn das mit Anmerkungen versehene Java-Element irgendwo im Code verwendet wird. In diesem Fall wird also nur angezeigt, ob Code vorhanden ist, der die Berechnungsmethode aufruft.

Außerdem können wir den veralteten Status in der Dokumentation mithilfe des Javadoc @ deprecated- Tags mitteilen .

3. Optionale Attribute in Java 9 hinzugefügt

Java 9 fügt einige optionale Attribute zum @deprecated Anmerkung: da und forRemoval .

Die seit Attribute erfordert eine Zeichenfolge , die wir in welcher Version das Element definieren läßt aufgegeben. Der Standardwert ist eine leere Zeichenfolge.

Und forRemoval ist ein Boolescher Wert , mit dem wir angeben können, ob das Element in der nächsten Version entfernt wird. Der Standardwert ist false:

public class Worker { /** * Calculate period between versions * @deprecated * This method is no longer acceptable to compute time between versions. * 

Use {@link Utils#calculatePeriod(Machine)} instead. * * @param machine instance * @return computed time */ @Deprecated(since = "4.5", forRemoval = true) public int calculate(Machine machine) { return machine.exportVersions().size() * 10; } }

Einfach ausgedrückt bedeutet die oben genannte Verwendung, dass die Berechnung seit 4.5 unserer Bibliothek veraltet ist und in der nächsten Hauptversion entfernt werden soll.

Es ist hilfreich, dies hinzuzufügen, da der Compiler uns stärker warnt, wenn er feststellt, dass wir eine Methode mit diesem Wert verwenden.

IDEs unterstützen bereits die Erkennung von Verwendungen einer mit forRemoval = true gekennzeichneten Methode . IntelliJ beispielsweise durchläuft den Code mit einer roten statt einer schwarzen Linie.

4. Fazit

In diesem kurzen Artikel haben wir gesehen, wie die Annotation @Deprecated und ihre optionalen Attribute verwendet werden, um Code zu markieren, der nicht mehr verwendet werden soll.

Den vollständigen Quellcode für die Beispiele finden Sie auf GitHub.