Olá pessoal eu estou
criando as minhas Exception
mas estou com uma dúvida
que não estou conseguindo resolver
publicclassAnaliseExceptionextendsException{...publicAnaliseException(MensagensDaAnalisemsg){switch(msg){caseRESULTADO_NEGATIVO:{//Aquieusetariaamensagemnoconstrutor//paraoFacesMessagepegarcomogetMessage()???this.setMessage("Resultado Negativo!");break;}caseSALVAR_ANTES_CALCULAR:{this.setMessage("Impossível Salvar Antes de Calcular!");break;}}}...}
Só que pediu para eu criar o seguinte método na minha
classe:
privatevoidsetMessage(Stringmsg){//eu pensei em passar essa msg para o super(msg);//mas não deu certo também.//para aonde que eu vou mandar essa mensagem??? }
Será que alguém poderia me dar uma ajuda?
Fazendo o Favor?
Voce poderia alterar esse enum para enviar a mensagem também algo como:
publicenumMensagensDaAnalise{ResultadoNegativo("Resultado Negativo!"),SalvarAntesCalcular("Impossível Salvar Antes de Calcular!");privateMensagensDaAnalise(Stringmsg){this.msg=msg;}privateStringmsg;publicStringgetMsg(){returnmsg;}}
Mas parece que não tem como
eu usar o método setMessage
através do super. Esta dando
erro aqui lina.
[]'s.
lina
Oi,
Então… é porque você está estendendo a classe Exception e ela não possui o método setMessage().
Você só irá conseguir executar o comando super.<nome_do_metodo> se na classe superior (pai) existir este método.
A explicação do Mark está correta e funcional… você tentou fazer como ele disse?
Tchauzin!
ricardocomp
Obrigado lina e Mark pela ajuda eu
vou tentar fazer igual o mark
deu a dica lina.
Obrigado a vc’s dois pela ajuda.
[]'s.
Marky.Vasconcelos
Exato… faça como a lina falou pra voce fazer como eu falei pra fazer.
Brincadeiras a parte.
Realmente não existe um método setMessage tanto em Exception nem em Throwable, então voce não consegue alterar (Bem… voce pode alterar por Reflection mas acho exagero isso).
E de qualquer modo evitar switchs é mais interessante. Fora o fato de que se voce precisar de mais uma MensagensDeAnalise voce precisa alterar apenas o enum e não criar uma nova clausula no switch.
lina
Mark_Ameba:
Exato… faça como a lina falou pra voce fazer como eu falei pra fazer.
Brincadeiras a parte.
Realmente não existe um método setMessage tanto em Exception nem em Throwable, então voce não consegue alterar (Bem… voce pode alterar por Reflection mas acho exagero isso).
E de qualquer modo evitar switchs é mais interessante. Fora o fato de que se voce precisar de mais uma MensagensDeAnalise voce precisa alterar apenas o enum e não criar uma nova clausula no switch.
Oi,
Porque ninguém gosta do switch?!
Tchauzin!
Abdon
Eu pessoalmente não trataria exception assim. Criaria uma exceptin ResultadoNegativoException, SalvarAntesDeCalcularException e por ai vai. Um exemplo é como o spring JDBC Templete trabalha, lançando unchecked exception bem explicativas como por exemplo OptimisticLockingFailureException, DataAccessException.
Claro que há quem faça da forma citada, como por exemplo todas as SQLException, que retornam o erro na mensagem, mas sei lá prq resolvi postar como é a minha preferencia.
Abdon
A vantagem da solução do Mark_Ameba sobre a sua, na minha opinião, é que para adicionar uma nova mensagem vc não precisa alterar a classe AnaliseException, colocando mais um case no switch, é que uma estrutura muito sugeita a erros, como por exemplo vc esquecer um break da vida. Na minha opinião as vantagens, nesse caso, são semelhantes a vc trocar um monte de if por polimorfismo.
Fica mais facil se vc precisa trocar uma mensagem vc vai direto no enum e não precisa ficar olhando procurando qual é o seu case correto a ser alterado.
Marky.Vasconcelos
lina:
Mark_Ameba:
Exato… faça como a lina falou pra voce fazer como eu falei pra fazer.
Brincadeiras a parte.
Realmente não existe um método setMessage tanto em Exception nem em Throwable, então voce não consegue alterar (Bem… voce pode alterar por Reflection mas acho exagero isso).
E de qualquer modo evitar switchs é mais interessante. Fora o fato de que se voce precisar de mais uma MensagensDeAnalise voce precisa alterar apenas o enum e não criar uma nova clausula no switch.
Oi,
Porque ninguém gosta do switch?!
Tchauzin!
Fora que ele é comprovadamente mais lento. E código OO é mais “bonito” de se ler.^^
sergiotaborda
O problema é que exceptions não devem ser feitas com switch. Ou a mesnagem é “erro negativo” ou não é. Não tem essa de decidir que messagem usar.
melhor ainda é criar subexceções conforme o caso especifico que se quer tratar.
Eu concordo com vc mas muitas apis não seguem sua dicas como por exemplo JDBC, com a famosa SQLException. Servlets, quando tem erro na pagina jsp e é lançada sempre um JasperException (não me lembro se é assim que escreve) e por ai vai.
ricardocomp
Olá pessoal,
acabei fazendo o que o Mark falou
e só fiquei meio em dúvida na hora
de lançar a exception é só fazer isso?