Supprimer l'avertissement d'importation obsolète dans Java

112

En Java, si vous importez une classe obsolète:

import SomeDeprecatedClass;

Vous obtenez cet avertissement: The type SomeDeprecatedClass is deprecated

Existe-t-il un moyen de supprimer cet avertissement?

Ed Mazur
la source
4
Oui, ce serait idéal, mais dans ce cas, j'utilise une bibliothèque pour Hadoop qui utilise une partie de son API qui a été récemment obsolète, donc je n'ai pas vraiment le choix si je veux utiliser cette bibliothèque. De plus, c'est juste pour un projet scolaire, rien qui devra être entretenu.
Ed Mazur

Réponses:

129

Utilisez cette annotation sur votre classe ou méthode:

@SuppressWarnings( "deprecation" )
Craigforster
la source
29
Cela fonctionne-t-il avec les importations? J'ai utilisé cette annotation sur les méthodes et autres, mais elle ne semble pas être reconnue avec les importations.
Ed Mazur
2
L'utilisation de l'annotation au niveau de la classe devrait également couvrir les importations. Il le fait au moins dans Eclipse (enfin, Rational Application Developer) pour moi, mais je n'en suis pas sûr lors de la compilation en ligne de commande.
craigforster
20
Cela ne semble pas fonctionner avec la tâche de ligne de commande "javac" ou <javac> de fourmi. L'indicateur -Xlint: -deprecation non plus. Cela ressemble à un bogue javac.
Archie
1
Ne fonctionne pas si la dépréciation fait partie d'un champ statique et d'un SuppressWarnings local. Le nom de classe pleinement qualifié semble être la meilleure approche ici.
mheinzerling le
16
La réponse ne devrait pas être en haut, car la question concerne l'instruction "import" et le correctif ne fonctionne que pour Eclipse / Intellij (cela semble être le cas selon les commentaires), mais la source ultime de vérité est javac pour lequel le correctif ne fonctionne pas. Cette réponse répond vraiment à la question: stackoverflow.com/a/20909204/2032701
Ruslan
179

Pour éviter l'avertissement: n'importez pas la classe

utilisez plutôt le nom de classe complet

et utilisez-le dans le moins d'endroits possible.

Kasper van den Berg
la source
15
+1 Cela devrait être la réponse acceptée. Il a l'avantage de ne pas supprimer les dépréciations sur toute la classe.
k_g
11
C'est la meilleure réponse, @SuppressWarningsau niveau de la classe ne couvre pas les importations
Alex
7
C'est la meilleure réponse jusqu'à Java 9, où elle est finalement corrigée: bugs.openjdk.java.net/browse/JDK-8032211
Christopher
14

En tant que piratage, vous ne pouvez pas effectuer l'importation et utiliser le nom complet dans le code.

Vous pouvez également essayer javac -Xlint: -deprecation pas sûr si cela résoudrait le problème.

TofuBière
la source
9

J'ai résolu ce problème en modifiant l'importation en:

import package.*

puis annoter la méthode qui utilisait les classes obsolètes avec@SuppressWarnings("deprecation")

Tim
la source
N'importez pas tout du package complet. Cela affectera les performances. Un compilateur inutile chargera toutes les classes entraînera de sérieux problèmes de performances. Assurez-vous toujours que les classes inutilisées ne sont pas présentes dans votre importation.
Arundev du
1
En utilisant une encyclopédie comme exemple ici (oui, je suis sorti avec moi) - si vous cherchez des informations sur un orang-outan, prenez-vous simplement le livre 'O' ou prenez-vous tous les livres?
2018 ascalonien
@Arundev, pour être clair, ce que vous dites, c'est que la compilation pourrait prendre plus de temps, mais au moment de l'exécution, cela n'aura aucun impact sur les performances de l'exécution, non?
Paulo
@Paulo - c'est ce que j'essaie de dire, il vérifiera la disponibilité des classes importées, même si elles ne sont pas utilisées. Donc, si vous avez beaucoup d'importations inutilisées, il est toujours préférable de les supprimer.
Arundev
7

Supposons que vous surchargez / implémentez une interface avec une méthode obsolète (telle que getUnicodeStream (String columnLabel) dans java.sql.ResultSet), vous ne vous débarrasserez pas des avertissements d'obsolescence simplement en utilisant l'annotation @SuppressWarnings ("deprecation") , sauf si vous annotez également la même nouvelle méthode avec l'annotation @Deprecated. C'est logique, car sinon vous pourriez "annuler la dépréciation" d'une méthode en remplaçant simplement sa description d'interface.

Per-Åke Minborg
la source
Cette combinaison de «@SuppressWarnings» et «@Deprecated» fonctionne également pour appeler des méthodes obsolètes dans votre propre méthode.
Swav
1
Je cherchais cette explication depuis si longtemps. Je vous remercie!
Jabari Dash
2

vous pouvez utiliser:

javac FileName.java -Xlint: -deprécation

Mais alors cela vous donnera des avertissements et vous indiquera également la partie du code qui cause la dépréciation ou qui utilise une API obsolète. Vous pouvez maintenant exécuter votre code avec ces avertissements ou apporter les modifications appropriées au code.

Dans mon cas, j'utilisais someListItem.addItem("red color")alors que le compilateur voulait que j'utilise someListItem.add("red color");.

Amit
la source