Suprimir aviso de importação obsoleta em Java


111

Em Java, se você importar uma classe obsoleta:

import SomeDeprecatedClass;

Você recebe este aviso: The type SomeDeprecatedClass is deprecated

Existe uma maneira de suprimir esse aviso?


4
Sim, seria o ideal, mas neste caso estou usando uma biblioteca para Hadoop que usa uma parte de sua API que foi descontinuada recentemente, então eu realmente não tenho escolha se quero usar essa biblioteca. Além disso, isso é apenas para um projeto escolar, não para nada que precise de manutenção.
Ed Mazur

Respostas:


129

Use esta anotação em sua classe ou método:

@SuppressWarnings( "deprecation" )

29
Isso funciona com importações? Eu usei essa anotação em métodos e coisas assim, mas não parece ser reconhecida com importações.
Ed Mazur

2
O uso da anotação no nível da classe também deve abranger as importações. Ele faz isso pelo menos dentro do Eclipse (bem, Rational Application Developer) para mim, mas não tenho certeza sobre isso durante a compilação da linha de comando.
craigforster

20
Parece não funcionar com a linha de comando "javac" ou a tarefa <javac> do ant. Nem o sinalizador -Xlint: -deprecation. Parece um bug javac.
Archie

1
Não funciona se a suspensão de uso fizer parte de um campo estático e de um SuppressWarnings local. Um nome de classe totalmente qualificado parece ser a melhor abordagem aqui.
mheinzerling

16
A resposta não deve estar no topo, já que a pergunta é sobre a instrução "import" e a correção funciona apenas para Eclipse / Intellij (parece que sim, de acordo com os comentários), mas a fonte final da verdade é javac para a qual a correção não funciona. Essa resposta realmente responde à pergunta: stackoverflow.com/a/20909204/2032701
Ruslan

179

Para evitar o aviso: não importe a classe

em vez disso, use o nome de classe totalmente qualificado

e use-o no menor número possível de locais.


15
1 Esta deve ser a resposta aceita. Tem a vantagem de não suprimir as depreciações de toda a classe.
k_g

11
Esta é a melhor resposta, @SuppressWarningsno nível de classe não cobre as importações
Alex

7
Esta é a melhor resposta até o Java 9, onde finalmente foi corrigida: bugs.openjdk.java.net/browse/JDK-8032211
Christopher

14

Como um hack, você não pode fazer a importação e usar o nome totalmente qualificado dentro do código.

Você também pode tentar javac -Xlint: -deprecation sem ter certeza se isso resolveria o problema.


9

Resolvi isso alterando a importação para:

import package.*

em seguida, anotando o método que usou as classes obsoletas com@SuppressWarnings("deprecation")


Não importe tudo do pacote inteiro. Isso afetará o desempenho. O compilador desnecessário carregará todas as classes, resultando em um sério problema de desempenho. Sempre certifique-se de que classes não utilizadas não estão presentes em sua importação.
Arundev

1
Usando uma enciclopédia como exemplo aqui (sim, eu me namorei) - se você está procurando informações sobre um orangotango, basta pegar o livro 'O' ou todos os livros?
Ascalonian

@Arundev, para ser claro, o que você está dizendo é que a compilação pode demorar mais para ser concluída, mas em tempo de execução, isso não terá nenhum impacto no desempenho da execução, certo?
Paulo

@Paulo - é o que estou querendo dizer, ele vai checar a disponibilidade de aulas importadas, mesmo que não estejam. Portanto, se você tiver muitas importações não utilizadas, é sempre melhor removê-las.
Arundev

7

Suponha que você esteja substituindo / implementando uma interface com um método obsoleto (como getUnicodeStream (String columnLabel) em java.sql.ResultSet), então você não se livrará dos avisos de depreciação apenas usando a anotação @SuppressWarnings ("deprecation") , a menos que você também anote o mesmo novo método com a anotação @Deprecated. Isso é lógico, porque caso contrário, você poderia "descontinuar" um método apenas substituindo sua descrição de interface.


Esta combinação de "@SuppressWarnings" e "@Deprecated" também funciona para chamar métodos obsoletos dentro de seu próprio método.
Swav

1
Há muito tempo procuro essa explicação. Obrigado!
Jabari Dash

2

você pode usar:

javac FileName.java -Xlint: -deprecation

Mas então isso vai lhe dar avisos e também dizer a parte do código que está causando a descontinuação ou usando uma API obsoleta. Agora você pode executar seu código com esses avisos ou fazer as alterações apropriadas no código.

No meu caso, eu estava usando someListItem.addItem("red color")enquanto o compilador queria que eu usasse someListItem.add("red color");.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.