| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/02/2003 11:11:37
|
Rafael Afonso
Virtual Machine Man
Membro desde: 05/12/2002 16:03:43
Mensagens: 719
Localização: São Paulo/SP
Offline
|
Olá:
Quando quero declarar um método como deprecated tenho que fazer algo como:
Assim, para verificar se um determinado método está depreciado o compilador verifica se dentro do comentário javadoc existe a String "@deprecated". Ora, Comentários foram feitos justamente para serem ignorados pelo compilador ! Isso inclui os comentários javadocs.
Creio que isso foi uma bola fora dos criadores do Java. Na minha humilde opinião seria mais adequado se "deprecated" fosse uma palavra-chave, usada como abaixo:
Será que não há algum expert do JCP que não tenha pensado nisso? Qual a opinião de vocês?
Grato,
|
Rafael Ubiratam Clemente Afonso
---------------------------------------
GitHub
ScalaFX
LinkedIn |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/02/2003 13:37:50
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Ha 2 problemas em fazer o que voce sugeriu:
1) Seria necessario fazer alteracao no codigo fonte, o que certamente nao eh a melhor coisa;
2) usar @deprecated faz com que isso tambem apareca na documentacao da classe. Se fosse da outra maneira, ou nao apareceria na documentacao, ou vc teria que adicionar o comentario MAIS a alteracao no codigo.. nao eh algo mto bom de fazer.
Como voce disse, comentarios sao ignorados, porem nesse caso ate eh uma solucao bem razoavel, e soh facilita a vida do programador.
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/02/2003 13:51:54
|
Rafael Afonso
Virtual Machine Man
Membro desde: 05/12/2002 16:03:43
Mensagens: 719
Localização: São Paulo/SP
Offline
|
1) Seria necessario fazer alteracao no codigo fonte, o que certamente nao eh a melhor coisa;
Quando abro um código fonte e acrescento a tag @deprecated, estou alterando o código de qualquer forma. Se bem que não na parte "funcional".
2) usar @deprecated faz com que isso tambem apareca na documentacao da classe. Se fosse da outra maneira, ou nao apareceria na documentacao, ou vc teria que adicionar o comentario MAIS a alteracao no codigo.. nao eh algo mto bom de fazer.
Basta alterara o programa gerador do Javadoc para que ele reconheça deprecated e exiba o aviso de depreciação. Se o Javadoc é inteligente o suficiente para verificar se um determinado método está sobrepondo outro método de mesma assinatura de alguma super-classe, não deve ser difícil ele tratar de deprecated.
Reconheço que este assunto é um tanto acadêmico, e que provavelmente não vai resultar em nada. Apenas acho que se pudesse retornar no tempo e recriar o Java, este seria um aspecto que eu levaria em consideração.
Grato,
|
Rafael Ubiratam Clemente Afonso
---------------------------------------
GitHub
ScalaFX
LinkedIn |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/02/2003 14:04:17
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline
|
Eu realmente me referia a parte funcional. E isso eh um problema.
A solucao que voce propoe eh muito mais sucetivel a erros. Depois, o programa que cria o Javadoc nao tem influencia alguma na hora de compilacao, logo ele nao pode "tratar deprecated".
Rafael
|
"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"
http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/02/2003 15:20:58
|
Rafael Afonso
Virtual Machine Man
Membro desde: 05/12/2002 16:03:43
Mensagens: 719
Localização: São Paulo/SP
Offline
|
Depois, o programa que cria o Javadoc nao tem influencia alguma na hora de compilacao, logo ele nao pode "tratar deprecated".
Sim, o gerador do Javadoc não influencia a compilação. Mas se ele pode, digamos, dizer se um método é public, abstract, syncronized, etc. simplesmente procurando por estas palavras no cabeçalho deste método, a mesma coisa poderia ser feita com a depreciação.
|
Rafael Ubiratam Clemente Afonso
---------------------------------------
GitHub
ScalaFX
LinkedIn |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/03/2003 10:38:43
|
mlopes
JavaTeenager
![[Avatar]](/images/avatar/c3e26d423e3654fab1f76.jpg)
Membro desde: 18/11/2002 11:01:01
Mensagens: 163
Localização: Alemanha
Offline
|
Concordo,
eu diria que seria melhor algo como
public deprecated void theMethod...
[]'s
|
Marco Lopes
----------------------------------------------------------
Pássaro que cedo madruga....
... porém o segundo rato é quem pega o queijo
---------------------------------------------------------- |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2003 01:21:25
|
richardpeder
GUJ Master
![[Avatar]](/images/avatar/bd686fd640be98efaae0091fa301e613.jpg)
Membro desde: 15/10/2002 08:39:04
Mensagens: 1548
Localização: Minas Tirith
Offline
|
Rafael:
Me perdoe a curiosidade....mas qual o motivo que leva vc a declarar um método como depreciado? pelo que sei, quando vc usa métodos de API's antigas do Java, ao compilar ele diz que existe metodos depreciados em sua classe, dai vc da -deprecated, algo assim, na hora de compilar e ele mostra, correto? então, pedindo desculpas novamente pela curiosidade, mas o que leva vc a querer declarar algo deste tipo??
Ate mais.....
|
"I see in your eyes the same fear that would take the heart of me. A day may come when the courage of men fail. When we forsake our friends and break all bonds of fellowship, but it is not this day. This day we fight!" (Discurso de Aragorn no Portão Negro de Mordor)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2003 02:51:25
|
Bani
JWizard
![[Avatar]](/images/avatar/6cdd60ea0045eb7a6ec44c54d29ed402.jpg)
Membro desde: 13/10/2002 23:17:37
Mensagens: 2443
Localização: São Paulo
Offline
|
Bom, não sei o caso específico do Rafael Afonso, mas o motivo que leva alguém a declarar algo como deprecated é o mesmo que leva as pessoas que mantém a API do Java a fazerem isso.
Você fez seu método em uma classe, está todo mundo usando, e um certo dia você percebe que estava meio ruim daquele jeito, mas que se você simplesmente "consertar", o código de outras pessoas pode parar de agir como esperado. Então você marca o método como deprecated e faz um novo para substituí-lo, aí as pessoas que pegarem a nova versão da sua classe e estiverem usando esse método serão informadas sobre a mudança.
|
~ Site da Bani ~ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2003 00:21:51
|
richardpeder
GUJ Master
![[Avatar]](/images/avatar/bd686fd640be98efaae0091fa301e613.jpg)
Membro desde: 15/10/2002 08:39:04
Mensagens: 1548
Localização: Minas Tirith
Offline
|
Bani:
Acho que vc esta querendo falar em "versionamento de métodos" não eh? bom, se caso for isso, com certeza eh muito interessante, pois sempre vc faz um metodo e ele tem erros, dai vc vai la, faz uma atualização dele e marca a anterior como deprecated.....massa!!
Obrigado e ate mais....
|
"I see in your eyes the same fear that would take the heart of me. A day may come when the courage of men fail. When we forsake our friends and break all bonds of fellowship, but it is not this day. This day we fight!" (Discurso de Aragorn no Portão Negro de Mordor)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2003 08:02:21
|
Bani
JWizard
![[Avatar]](/images/avatar/6cdd60ea0045eb7a6ec44c54d29ed402.jpg)
Membro desde: 13/10/2002 23:17:37
Mensagens: 2443
Localização: São Paulo
Offline
|
É por aí, mas o ideal é sempre tentar corrigir seu próprio método se isso não for impactar ninguém.
O deprecated é só para quando realmente a mudança é meio "radical" e aí precisa fazer um novo.
|
~ Site da Bani ~ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2003 09:33:50
|
Rafael Afonso
Virtual Machine Man
Membro desde: 05/12/2002 16:03:43
Mensagens: 719
Localização: São Paulo/SP
Offline
|
Richardpeder:
Quanto os motivo para declarar um metodo deprecated, a Bani respondeu por mim.
richardpeder wrote:Rafael:
Me perdoe a curiosidade....mas qual o motivo que leva vc a declarar um método como depreciado? pelo que sei, quando vc usa métodos de API's antigas do Java, ao compilar ele diz que existe metodos depreciados em sua classe, dai vc da -deprecated, algo assim, na hora de compilar e ele mostra, correto? então, pedindo desculpas novamente pela curiosidade, mas o que leva vc a querer declarar algo deste tipo??
Ate mais.....
|
Rafael Ubiratam Clemente Afonso
---------------------------------------
GitHub
ScalaFX
LinkedIn |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/03/2003 19:23:14
|
dukejeffrie
Virtual Machine Man
![[Avatar]](/images/avatar/c74d97b01eae257e44aa9d5bade97baf.png)
Membro desde: 21/08/2002 03:53:28
Mensagens: 661
Offline
|
Não se marca como deprecated uma versão de um método.
Você marca o método inteiro. E depois não tem mais volta, a menos que vc queira uma bagunça.
Um método é deprecated quando ele provavelmente será removido da API.
Quando vc faz código para outras pessoas usarem, às vezes vc se depara com essas coisas: erros graves em situações específicas, ou comportamentos que não existem mais.
Por exemplo:
Vc tem uma constante inteira que te permite setar o tipo da tag. Mas vc de repente percebe que essa abordagem é horrível e resolve criar uma classe TagType que vai fazer a tarefa difícil para você:
E agora?? Vc quer que todo mundo use o jeito novo, mas existe código de outros que chama seu método inteiro! Vc torna-o deprecado e faz uma gambiarra para que uma chamada ao método antigo ainda funcione. Mas ele eventualmente vai sumir.
Repare na classe java.util.Date, que é um caso clássico...
aquelão!!
|
|
|
 |
|
|