Como assim Exception ? O código não deveria nem compilar. E também não estou entendendo, se você precisa alterar o valor da variável ao longo do programa então ela não deve ser final. Se você precisa parametrizar o valor da variável você pode fazer isso no construtor.
rmendes08
Ah sim, somente agora vi que você está tentando fazer por Reflection, mesmo assim, não entendo o porque disso.
J
JavaTux
O que postei não compila porque colei uma versão com sysout, desconsidere.
E a coisa não é tão simples como vc pensa, eu tenho uma annotation que possui um atributo value:
// o value só aceita uma atribuição direta ou uma CONSTANTE.// static final String TESTES@Next(value=TESTES)publicvoidfazAlgo(){...}
O que eu precisaria é reatribuir esse value, pois em determinado momento eu quero que o @Next vá para um destino XXX e outro momento yyy, e etc etc etc.
Entendeu ?!
gabrielhof
É muito simples. Não use final.
@Edit
Não havia visto o post acima.
O que postei não compila porque colei uma versão com sysout, desconsidere.
E a coisa não é tão simples como vc pensa, eu tenho uma annotation que possui um atributo value:
// o value só aceita uma atribuição direta ou uma CONSTANTE.// static final String TESTES@Next(value=TESTES)publicvoidfazAlgo(){...}
O que eu precisaria é reatribuir esse value, pois em determinado momento eu quero que o @Next vá para um destino XXX e outro momento yyy, e etc etc etc.
Entendeu ?!
Ta calma, qual a idéia deste @Next? Talvez ele possa ser substituido por outra coisa.
leonardobhbr
Amigo ja tive esse mesmo problema é não obtive nenhuma solução.
O que eu fiz foi na minha anotação eu passar parametros que na verdade seria o nome da classe e o nome do metodo para eu conseguir fazer a chamada do metodo via reflection e obter a String correta
rmendes08
Talvez a saída seja justamente não usar annotation. A razão dos parâmetros de uma annotation aceitarem somente literais e constantes é justamente o fato de ser um recurso que deve ser usado durante a escrita do programa, e não durante a execução. Talvez a saída seja criar uma interface com o método getNext() e fazer sua classe implementar esse método.
Particularmente, annotations e reflections são recursos que eu usaria apenas para metaprogramação. Para a maioria dos caso, OO resolve muito bem.
eliangela
leonardobhbr:
Amigo ja tive esse mesmo problema é não obtive nenhuma solução.
O que eu fiz foi na minha anotação eu passar parametros que na verdade seria o nome da classe e o nome do metodo para eu conseguir fazer a chamada do metodo via reflection e obter a String correta