"Deployando" os fontes de uma edição da Revista Java Magazine, deparei com um mesmo problema para diversas classes DAO.
No fonte/exemplo abaixo, aparece erro na linha 11 com a mensagem: "[color=red]The method criar(Cliente) of type ClienteJpaDao must override a superclass method[/color]"
Ora, o que não entendo é por que a "solução" é retirar a annotation @Override e pronto! O código compila...
Por que?
Devo estar pisando na bola sobre algum conceito de annotation e/ou linguagem java mesmo... Alguém pode ajudar?
Obrigado!
Abrs
"Deployando" os fontes de uma edição da Revista Java Magazine, deparei com um mesmo problema para diversas classes DAO.
No fonte/exemplo abaixo, aparece erro na linha 11 com a mensagem: "[color=red]The method criar(Cliente) of type ClienteJpaDao must override a superclass method[/color]"
Ora, o que não entendo é por que a "solução" é retirar a annotation @Override e pronto! O código compila...
Por que?
Devo estar pisando na bola sobre algum conceito de annotation e/ou linguagem java mesmo... Alguém pode ajudar?
Obrigado!
Abrs
Por favor coloque o codigo da superclasse para que possamos analisar... 8)
claudiom
a annotation @override indica que você está fazendo override de um método da superclasse…
no seu caso, a interface ClienteDao não deve ter o método criar(Cliente)… e portanto não consegue compilar…
quando tira a anotação, ele vira um método da sua própria classe, e por isso compila normal…
uma das principais utilidades dessa anotação é justamente ser avisado se houver mudança na classe pai…
se um método muda, você pára de fazer override, seu código não compila e você fica sabendo o que tá acontecendo…
a annotation @override indica que você está fazendo override de um método da superclasse…
no seu caso, a interface ClienteDao não deve ter o método criar(Cliente)… e portanto não consegue compilar…
quando tira a anotação, ele vira um método da sua própria classe, e por isso compila normal…
uma das principais utilidades dessa anotação é justamente ser avisado se houver mudança na classe pai…
se um método muda, você pára de fazer override, seu código não compila e você fica sabendo o que tá acontecendo…
Ok. Obrigado! Valeu.
Mas, criar(Cliente cliente) está em ClienteDao, conforme código acima…
Ambas as classes, ClienteDao e ClienteJpaDao, estão no mesmo pacote.
Estranho demais… rs saco… hehehe
Será que é porque ClienteDao é uma interface?
Carlos_ds_jar
Ok. Obrigado! Valeu.
Mas, criar(Cliente cliente) está em ClienteDao, conforme código acima…
Ambas as classes, ClienteDao e ClienteJpaDao, estão no mesmo pacote.
Estranho demais… rs saco… hehehe
Não são ambas as classes são a classe ClienteJpaDao e a interface Cliente Dão
Com toda certeza é isso. A interface é um contrato que diz quais metodos uma classe deve possuir, quando vc coloca o implemens na sua classe vc está assinando esse contrado de maneira que vc vai ‘fornecer’ uma implementação ao metodo estabelecido pelo contrato e não ‘sobrescrever’ um método ja escrito numa superclasse. Portanto na ocasião não cabe colocar um @Override.
L
Leonardo3001
Se você compilar usando JDK 5, é erro de compilação dar @Override sobre um método de interface (é permitido apenas para superclasses). Usando JDK 6, tanto métodos de interfaces quanto de superclasses podem ser sobrescritos e marcados com @Overwrite.
O que deve estar acontecendo é que o autor da revista usou a versão 6 e você, a versão 5.