Unterdrückte Importwarnung in Java unterdrücken


111

Wenn Sie in Java eine veraltete Klasse importieren:

import SomeDeprecatedClass;

Sie erhalten diese Warnung: The type SomeDeprecatedClass is deprecated

Gibt es eine Möglichkeit, diese Warnung zu unterdrücken?


4
Ja, das wäre ideal, aber in diesem Fall verwende ich eine Bibliothek für Hadoop, die einen Teil der API verwendet, der kürzlich veraltet war. Daher habe ich keine Wahl, ob ich diese Bibliothek verwenden möchte. Außerdem ist dies nur für ein Schulprojekt gedacht, nichts, was gewartet werden muss.
Ed Mazur

Antworten:


129

Verwenden Sie diese Anmerkung für Ihre Klasse oder Methode:

@SuppressWarnings( "deprecation" )

29
Funktioniert das mit Importen? Ich habe diese Anmerkung für Methoden und dergleichen verwendet, aber sie scheint bei Importen nicht erkannt zu werden.
Ed Mazur

2
Die Verwendung der Anmerkung auf Klassenebene sollte auch Importe abdecken. Dies geschieht zumindest in Eclipse (also Rational Application Developer) für mich, aber ich bin mir bei der Kompilierung der Befehlszeile nicht sicher.
craigforster

20
Es scheint nicht mit der Befehlszeile "javac" oder der <javac> -Aufgabe von ant zu funktionieren. Das Flag -Xlint: -deprecation wird ebenfalls nicht angezeigt. Scheint wie ein Javac-Bug.
Archie

1
Funktioniert nicht, wenn die Verwerfung Teil eines statischen Felds und lokaler SuppressWarnings ist. Ein voll qualifizierter Klassenname scheint hier der bessere Ansatz zu sein.
Mheinzerling

16
Die Antwort sollte nicht oben stehen, da es sich bei der Frage um die "import" -Anweisung handelt und der Fix nur für Eclipse / Intellij funktioniert (scheint den Kommentaren zufolge so zu sein), aber die ultimative Quelle der Wahrheit ist javac, für den der Fix funktioniert nicht Diese Antwort beantwortet wirklich die Frage: stackoverflow.com/a/20909204/2032701
Ruslan

179

Um die Warnung zu vermeiden: Sie nicht die Klasse importieren

Verwenden Sie stattdessen den vollständig qualifizierten Klassennamen

und verwenden Sie es an so wenigen Orten wie möglich.


15
+1 Dies sollte die akzeptierte Antwort sein. Es hat den Vorteil, dass Abwertungen für die gesamte Klasse nicht unterdrückt werden.
k_g

11
Dies ist die bessere Antwort, @SuppressWarningsauf Klassenebene gilt nicht für Importe
Alex

7
Dies ist die beste Antwort bis Java 9, wo es endlich behoben ist: bugs.openjdk.java.net/browse/JDK-8032211
Christopher

14

Als Hack können Sie den Import nicht durchführen und den vollständig qualifizierten Namen im Code verwenden.

Sie könnten auch versuchen, javac -Xlint: -deprecation nicht sicher, ob das es beheben würde.


9

Ich habe dies gelöst, indem ich den Import geändert habe in:

import package.*

Kommentieren Sie dann die Methode, mit der die veralteten Klassen verwendet wurden@SuppressWarnings("deprecation")


Importieren Sie nicht alles aus dem gesamten Paket. Dies wirkt sich auf die Leistung aus. Unnötiger Compiler lädt alle Klassen, was zu ernsthaften Leistungsproblemen führt. Verwenden Sie immer, dass nicht verwendete Klassen in Ihrem Import nicht vorhanden sind.
Arundev

1
Verwenden Sie hier eine Enzyklopädie als Beispiel (ja, ich habe mich selbst datiert) - wenn Sie nach Informationen über einen Orang-Utan suchen, greifen Sie einfach zum O-Buch oder zu allen Büchern?
Ascalonian

@Arundev, um klar zu sein, Sie sagen, dass die Kompilierung länger dauern könnte, aber zur Laufzeit hat dies keine Auswirkungen auf die Leistung der Ausführung, oder?
Paulo

@Paulo - das ist, was ich sagen will, es wird die Verfügbarkeit von importierten Klassen prüfen, auch wenn es nicht verwendet wird. Wenn Sie also viele nicht verwendete Importe haben, ist es immer besser, diese zu entfernen.
Arundev

7

Angenommen, Sie überschreiben / implementieren eine Schnittstelle mit einer veralteten Methode (z. B. getUnicodeStream (String columnLabel) in java.sql.ResultSet). Dann werden Sie Verfallswarnungen nicht einfach durch die Verwendung der Anmerkung @SuppressWarnings ("Verfall") entfernen. , es sei denn, Sie kommentieren dieselbe neue Methode auch mit der Annotation @Deprecated. Dies ist logisch, da Sie andernfalls eine Methode "veralten" könnten, indem Sie nur ihre Schnittstellenbeschreibung überschreiben.


Diese Kombination aus "@SuppressWarnings" und "@Deprecated" funktioniert auch zum Aufrufen veralteter Methoden innerhalb Ihrer eigenen Methode.
Swav

1
Ich habe so lange nach dieser Erklärung gesucht. Danke dir!
Jabari Dash

2

Sie können verwenden:

javac FileName.java -Xlint: -deprecation

Aber dann erhalten Sie Warnungen und erfahren auch, welcher Teil des Codes veraltet ist oder ob die veraltete API verwendet wird. Jetzt können Sie entweder Ihren Code mit diesen Warnungen ausführen oder entsprechende Änderungen am Code vornehmen.

In meinem Fall habe ich verwendet, someListItem.addItem("red color")während der Compiler wollte, dass ich verwende someListItem.add("red color");.

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.