Suprimir la advertencia de importación obsoleta en Java

111

En Java, si importa una clase obsoleta:

import SomeDeprecatedClass;

Recibes esta advertencia: The type SomeDeprecatedClass is deprecated

¿Hay alguna forma de suprimir esta advertencia?

Ed Mazur
fuente
4
Sí, eso sería ideal, pero en este caso estoy usando una biblioteca para Hadoop que usa una parte de su API que fue obsoleta recientemente, por lo que realmente no tengo opción si quiero usar esta biblioteca. Además, esto es solo para un proyecto escolar, no para nada que necesite mantenimiento.
Ed Mazur

Respuestas:

129

Use esta anotación en su clase o método:

@SuppressWarnings( "deprecation" )
Craigforster
fuente
29
¿Funciona esto con las importaciones? He usado esa anotación en métodos y demás, pero no parece ser reconocida con las importaciones.
Ed Mazur
2
El uso de la anotación a nivel de clase también debería cubrir las importaciones. Hace esto al menos dentro de Eclipse (bueno, Rational Application Developer) para mí, pero no estoy seguro durante la compilación de la línea de comandos.
Craigforster
20
No parece funcionar con la línea de comandos "javac" o la tarea <javac> de ant. Tampoco el indicador -Xlint: -deprecation. Parece un error de javac.
Archie
1
No funciona si la desaprobación es parte de un campo estático y SuppressWarnings local. El nombre de clase completamente calificado parece ser el mejor enfoque aquí.
mheinzerling
16
La respuesta no debería estar en la parte superior, ya que la pregunta es sobre la declaración de "importación" y la solución funciona solo para Eclipse / Intellij (parece que sí según los comentarios), pero la fuente última de la verdad es javac para la cual la solución no funciona. Esta respuesta realmente responde a la pregunta: stackoverflow.com/a/20909204/2032701
Ruslan
179

Para evitar la advertencia: no importe la clase

en su lugar, use el nombre de clase completamente calificado

y utilícelo en el menor número posible de ubicaciones.

Kasper van den Berg
fuente
15
+1 Esta debería ser la respuesta aceptada. Tiene la ventaja de no suprimir las depreciaciones de toda la clase.
k_g
11
Esta es la mejor respuesta, @SuppressWarningsa nivel de clase no cubre las importaciones
Alex
7
Esta es la mejor respuesta hasta Java 9, donde finalmente se corrigió: bugs.openjdk.java.net/browse/JDK-8032211
Christopher
14

Como truco, no puede importar y usar el nombre completo dentro del código.

También puede probar javac -Xlint: -deprecation no estoy seguro de si eso lo solucionaría.

Tofu cerveza
fuente
9

Resolví esto cambiando la importación a:

import package.*

luego anotando el método que usó las clases obsoletas con@SuppressWarnings("deprecation")

Tim
fuente
No importe todo del paquete completo. Afectará el rendimiento. El compilador innecesario cargará todas las clases y dará como resultado un problema de rendimiento grave. Siempre haga uso de que las clases no utilizadas no estén presentes en su importación.
Arundev
1
Usando una enciclopedia como ejemplo aquí (sí, salí conmigo mismo): si está buscando información sobre un orangután, ¿simplemente toma el libro 'O' o toma todos los libros?
Ascalonian
@Arundev, para que quede claro, lo que está diciendo es que la compilación podría tardar más en completarse, pero en tiempo de ejecución, esto no tendrá ningún impacto en el rendimiento de la ejecución, ¿verdad?
Paulo
@Paulo: eso es lo que estoy tratando de decir, verificará la disponibilidad de las clases importadas, incluso si no se usan. Entonces, si tiene muchas importaciones sin usar, siempre es mejor eliminarlas.
Arundev
7

Suponga que está anulando / implementando una interfaz con un método obsoleto (como getUnicodeStream (String columnLabel) en java.sql.ResultSet), entonces no se deshará de las advertencias de desaprobación simplemente usando la anotación @SuppressWarnings ("desaprobación") , a menos que también anote el mismo método nuevo con la anotación @Deprecated. Esto es lógico, porque de lo contrario podría "anular la interpretación" de un método simplemente anulando la descripción de su interfaz.

Per-Åke Minborg
fuente
Esta combinación de "@SuppressWarnings" y "@Deprecated" también funciona para llamar a métodos obsoletos dentro de su propio método.
Swav
1
He estado buscando esa explicación durante tanto tiempo. ¡Gracias!
Jabari Dash
2

puedes usar:

javac FileName.java -Xlint: -deprecation

Pero luego esto le dará advertencias y también le dirá la parte del código que está causando la desaprobación o el uso de una API desaprobada. Ahora puede ejecutar su código con estas advertencias o realizar los cambios apropiados en el código.

En mi caso, estaba usando someListItem.addItem("red color")mientras el compilador quería que usara someListItem.add("red color");.

Amit
fuente