Estou usando o eclipse para desenvolver um aplicativo da web. Ainda hoje, atualizei minha versão do struts alterando o arquivo JAR. Estou recebendo avisos em alguns lugares de que os métodos estão obsoletos, mas o código está funcionando bem.
Eu quero saber algumas coisas
É errado usar métodos ou classes reprovados em Java?
E se eu não alterar nenhum método e executar meu aplicativo com os avisos que tenho, isso criará algum problema de desempenho.
java
methods
deprecated
Umesh Aawte
fonte
fonte
1955 Volkswagen Beetle
mesmo que lhe seja oferecidoCorvette Stingray
, de graça? (0:4
outros: Gotcha! (0;1955 Volkswagen Beetle
e1956 Volkswagen Beetle
com pneus novos que você não sabe quando vai quebrar!Respostas:
A partir da definição de obsoleto :
O método é mantido na API para compatibilidade com versões anteriores por um período não especificado e pode, em versões futuras, ser removido. Ou seja, não, não está errado , mas existe uma maneira melhor de fazê-lo, que é mais robusta contra as alterações da API.
Provavelmente não. Ele continuará funcionando como antes da reprovação. O contrato do método API não será alterado. Se alguma estrutura interna de dados mudar em favor de um método novo e melhor, pode haver um impacto no desempenho, mas é bastante improvável.
A depreciação mais engraçada da API Java é imo, the
FontMetrics.getMaxDecent
. Motivo da reprovação: erro de ortografia.fonte
Você ainda pode usar código obsoleto sem alterar o desempenho, mas o objetivo principal de descontinuar um método / classe é permitir que os usuários saibam que agora existe uma maneira melhor de usá-lo e que, em uma versão futura, o código descontinuado provavelmente será removido.
fonte
Terminologia
Do glossário oficial da Sun:
No guia de como e quando descontinuar:
A
@Deprecated
anotação foi além e alerta sobre o perigo:Referências
Certo ou errado?
A questão de saber se é certo ou errado usar métodos obsoletos terá que ser examinada individualmente. Aqui estão TODAS as citações em que a palavra "descontinuado" aparece no Effective Java 2nd Edition :
Portanto, pelo menos com todos os métodos acima, é claramente errado usá-los, pelo menos de acordo com Josh Bloch.
Com outros métodos, você tem que considerar as questões individualmente, e compreender PORQUE eles estavam obsoletos, mas de um modo geral, quando se justifica a decisão de deprecate, ele tenderá a inclinar-se para errado do que certo para continuar a usá-los.
Perguntas relacionadas
fonte
Além de todas as excelentes respostas acima, descobri que há outro motivo para remover chamadas de API descontinuadas.
Pesquisando por que uma chamada foi descontinuada, muitas vezes me pego aprendendo coisas interessantes sobre o Java / API / Framework. Muitas vezes, há uma boa razão pela qual um método está sendo preterido e o entendimento dessas razões leva a insights mais profundos.
Portanto, de uma perspectiva de aprendizado / crescimento, também é um esforço que vale a pena
fonte
Certamente não cria um problema de desempenho - obsoleto significa que, no futuro, é provável que a função não faça mais parte da biblioteca; portanto, evite usá-lo no novo código e altere o código antigo para parar de usá-lo. você não encontra problemas um dia ao atualizar struts e descobre que a função não está mais presente
fonte
It certainly doesn't create a performance issue
; é muito subjetivo afirmar isso.Não está errado, apenas não é recomendado. Geralmente, significa que, neste momento, existe uma maneira melhor de fazer as coisas e você faria o bem se usasse a nova maneira aprimorada. Algumas coisas obsoletas são realmente perigosas e devem ser evitadas por completo. A nova maneira pode produzir um desempenho melhor que o obsoleto, mas nem sempre é o caso.
fonte
Você pode ter ouvido o termo "humor depreciativo". Isso é humor que minimiza sua importância. Uma classe ou método obsoleto é assim. Não é mais importante. É tão sem importância, de fato, que não deve mais ser usado, pois provavelmente deixará de existir no futuro.
Tente evitá-lo
fonte
deprecated
métodos desde que você tenha um bom plano de contingência para evitar problemas se / quando esses métodos desaparecerem da biblioteca que você está usando. Com a própria API Java, isso nunca acontece, mas com praticamente qualquer outra coisa significa que será removido. Se você planeja especificamente não atualizar ( embora você provavelmente deva a longo prazo ) as bibliotecas de suporte do software, não há problema em usardeprecated
métodos.fonte
Sim, está errado.
Métodos ou classes preteridos serão removidos em versões futuras do Java e não devem ser usados. Em cada caso, deve haver uma alternativa disponível. Use isso.
Existem alguns casos em que você precisa usar uma classe ou método obsoleto para atingir uma meta do projeto. Nesse caso, você realmente não tem escolha a não ser usá-lo. Versões futuras do Java podem quebrar esse código, mas se for um requisito, você precisará conviver com isso. Provavelmente não é a primeira vez que você faz algo errado para atender a um requisito do projeto, e certamente não será o último.
Quando você atualiza para uma nova versão do Java ou alguma outra biblioteca, algumas vezes um método ou classe que você estava usando fica obsoleto. Métodos preteridos não são suportados, mas não devem produzir resultados inesperados. Isso não significa que eles não o façam, portanto, mude seu código o mais rápido possível.
O processo de descontinuação existe para garantir que os autores tenham tempo suficiente para alterar seu código de uma API antiga para uma nova API. Faça uso desse tempo. Altere seu código o mais rápido possível.
fonte
Não está errado, mas alguns dos métodos descontinuados são removidos nas versões futuras do software; portanto, você pode acabar não trabalhando com o código.
fonte
Removed
? Veja a definição stackoverflow.com/questions/2941900/…Não está errado como tal, mas pode poupar alguns problemas. Aqui está um exemplo em que é fortemente desencorajado o uso de um método obsoleto:
http://java.sun.com/j2se/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html
Não deve haver problemas em termos de desempenho. A API padrão foi projetada para respeitar alguma compatibilidade com versões anteriores, para que os aplicativos possam ser gradualmente adaptados às versões mais recentes do Java.
fonte
É errado usar métodos ou classes reprovados em Java? Não está "errado", ainda está funcionando, mas evite-o tanto quanto possível.
Suponha que exista uma vulnerabilidade de segurança associada a um método e os desenvolvedores determinem que é uma falha de design. Portanto, eles podem decidir descontinuar o método e introduzir o novo caminho.
Portanto, se você ainda usa o método antigo, você tem uma ameaça. Portanto, esteja ciente do motivo da reprovação e verifique se isso afeta você.
e se não alterar nenhum método e executar meu aplicativo com os avisos que tenho, isso criará algum problema de desempenho.
Se a depreciação for devido a um problema de desempenho, você sofrerá com um problema de desempenho, caso contrário, não há razão para ter esse problema. Mais uma vez gostaria de salientar, esteja ciente do motivo da depreciação.
fonte
Em Java é @ Deprecated, em C # é [Obsoleto].
Eu acho que prefiro a terminologia do C #. Significa apenas que é obsoleto. Você ainda pode usá-lo se quiser, mas provavelmente existe uma maneira melhor.
É como usar o Windows 3.1 em vez do Windows 7, se você acredita que o Windows 3.1 é obsoleto. Você ainda pode usá-lo, mas provavelmente há recursos melhores em uma versão futura, além de que as versões futuras provavelmente serão suportadas - a obsoleta não será.
O mesmo para o @ Deprecated do Java - você ainda pode usar o método, mas por seu próprio risco - no futuro, ele pode ter alternativas melhores e nem ser suportado.
Se você estiver usando código reprovado, geralmente é bom, desde que você não precise atualizar para uma API mais recente - o código reprovado pode não existir lá. Sugiro que você veja algo que está usando código obsoleto, para atualizar para usar as alternativas mais recentes (isso geralmente é indicado na anotação ou em um comentário obsoleto do Javadoc).
Edit: E, como apontado por Michael, se o motivo da reprovação for devido a uma falha na funcionalidade (ou porque a funcionalidade nem deveria existir), obviamente, não se deve usar o código obsoleto.
fonte
Claro que não - já que todo o Java está recebendo @ Deprecated :-), você pode usá-los pelo tempo que o Java durar. Não vou notar nenhuma diferença, a menos que seja algo realmente quebrado. Significado - tem que ler sobre isso e depois decidir.
No .Net, no entanto, quando algo é declarado [Obsoleto], leia-o imediatamente, mesmo se você nunca o tiver usado antes - você tem cerca de 50% de chance de ser mais eficiente e / ou mais fácil de usar do que substituir :-))
Portanto, em geral, pode ser bastante benéfico ser tecnoconservador hoje em dia, mas você deve fazer sua tarefa de leitura primeiro.
fonte
Eu sinto que esse método obsoleto significa; existe um método alternativo disponível que é melhor em todos os aspectos do que o método existente. Melhor usar o bom método do que o antigo método existente. Para compatibilidade com versões anteriores, os métodos antigos são deixados como obsoletos.
fonte