Elimina l'avviso di importazione obsoleto in Java


111

In Java, se importi una classe obsoleta:

import SomeDeprecatedClass;

Ricevi questo avviso: The type SomeDeprecatedClass is deprecated

C'è un modo per sopprimere questo avviso?


4
Sì, sarebbe l'ideale, ma in questo caso sto usando una libreria per Hadoop che utilizza una parte della sua API che è stata recentemente deprecata, quindi non ho davvero scelta se voglio usare questa libreria. Inoltre questo è solo per un progetto scolastico, non per tutto ciò che dovrà essere mantenuto.
Ed Mazur

Risposte:


129

Usa questa annotazione sulla tua classe o metodo:

@SuppressWarnings( "deprecation" )

29
Funziona con le importazioni? Ho usato quell'annotazione su metodi e simili, ma non sembra essere riconosciuta con le importazioni.
Ed Mazur

2
L'uso dell'annotazione a livello di classe dovrebbe coprire anche le importazioni. Lo fa almeno all'interno di Eclipse (beh, Rational Application Developer) per me, ma non ne sono sicuro durante la compilazione della riga di comando.
Craigforster

20
Non sembra funzionare con "javac" da riga di comando o con il task <javac> di ant. Nemmeno il flag -Xlint: -deprecation. Sembra un bug di javac.
Archie

1
Non funziona se la deprecazione fa parte di un campo statico e di un SuppressWarnings locale. Il nome della classe pienamente qualificato sembra essere l'approccio migliore qui.
mheinzerling

16
La risposta non dovrebbe essere in cima, poiché la domanda riguarda l'istruzione "import" e la correzione funziona solo per Eclipse / Intellij (sembra così secondo i commenti), ma l'ultima fonte di verità è javac per cui la correzione non funziona. Questa risposta risponde davvero alla domanda: stackoverflow.com/a/20909204/2032701
Ruslan

179

Per evitare l'avviso: non importare la classe

utilizzare invece il nome completo della classe

e utilizzalo nel minor numero di posizioni possibile.


15
+1 Questa dovrebbe essere la risposta accettata. Ha il vantaggio di non sopprimere le deprecazioni sull'intera classe.
k_g

11
Questa è la risposta migliore, @SuppressWarningsa livello di classe non copre le importazioni
Alex

7
Questa è la risposta migliore fino a Java 9, dove è stata finalmente risolta: bugs.openjdk.java.net/browse/JDK-8032211
Christopher

14

Come hack non puoi eseguire l'importazione e utilizzare il nome completo all'interno del codice.

Potresti anche provare javac -Xlint: -deprecation non sono sicuro se questo risolverà il problema.


9

Ho risolto questo problema modificando l'importazione in:

import package.*

quindi annotare il metodo che utilizzava le classi deprecate con@SuppressWarnings("deprecation")


Non importare tutto dall'intero pacchetto. Influirà sulle prestazioni. Il compilatore non necessario caricherà tutte le classi causerà gravi problemi di prestazioni. Fare sempre in modo che le classi inutilizzate non siano presenti nell'importazione.
Arundev

1
Usando un'enciclopedia come esempio qui (sì, sono uscito con me stesso) - se stai cercando informazioni su un orango, prendi semplicemente il libro "O" o prendi tutti i libri?
Ascaloniano

@ Arundev, per essere chiari, quello che stai dicendo è che la compilazione potrebbe richiedere più tempo per essere completata, ma in fase di esecuzione, questo non avrà alcun impatto sulle prestazioni dell'esecuzione, giusto?
Paulo

@Paulo - questo è quello che sto cercando di dire, controllerà la disponibilità delle classi importate, anche se non viene utilizzato. Quindi se hai molte importazioni inutilizzate è sempre meglio rimuoverle.
Arundev

7

Supponiamo che tu stia sovrascrivendo / implementando un'interfaccia con un metodo deprecato (come getUnicodeStream (String columnLabel) in java.sql.ResultSet), quindi non ti libererai degli avvisi di deprecazione semplicemente utilizzando l'annotazione @SuppressWarnings ("deprecation") , a meno che non si annoti anche lo stesso nuovo metodo con l'annotazione @Deprecated. Questo è logico, perché altrimenti potresti "annullare la defecazione" di un metodo sovrascrivendo la sua descrizione dell'interfaccia.


Questa combinazione di "@SuppressWarnings" e "@Deprecated" funziona anche per chiamare metodi deprecati all'interno del tuo metodo.
Swav

1
Ho cercato questa spiegazione per così tanto tempo. Grazie!
Jabari Dash

2

Puoi usare:

javac FileName.java -Xlint: -deprecation

Ma poi questo ti darà avvisi e ti dirà anche la parte del codice che sta causando la deprecazione o che utilizza API deprecate. Ora puoi eseguire il codice con questi avvisi o apportare le modifiche appropriate al codice.

Nel mio caso stavo usando someListItem.addItem("red color")mentre il compilatore voleva che usassi someListItem.add("red color");.

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.