tenho um método de uma classe que extende da classe x: public int atualizarSolicitacao(Solicitacao solicitacao) throws Exception {
e o método: public void atualizarSolicitacao(Solicitacao sol) que está na classe x.
Eles tem o mesmo nome, mas retornam tipos diferentes.
O netbeans está reclamando, dizendo que não pode fazer override - pois os tipos são diferentes (can’t override return type is not compatible) - mas o objetivo não é fazer overread.
Alguém pode me indicar um meio de resolver o problema?
tenho um método de uma classe que extende da classe x: public int atualizarSolicitacao(Solicitacao solicitacao) throws Exception {
e o método: public void atualizarSolicitacao(Solicitacao sol) que está na classe x.
Eles tem o mesmo nome, mas retornam tipos diferentes.
O netbeans está reclamando, dizendo que não pode fazer override - pois os tipos são diferentes (can’t override return type is not compatible) - mas o objetivo não é fazer overread.
Alguém pode me indicar um meio de como fazer isso?
Eu, na minha simples ignorancia, achava que isso era feito automaticamente, já que os tipos de retorno são diferentes, tornando as assinaturas dos métodos diferentes também =/
[/quote] Isso que vc está fazendo não é possível. Se quiser fazer o override(uso do polimorfismo) com retornos diferentes, procure por retornos covariantes.
Como int não é uma subclasse de void, (ou seja, int não estende void) então você não pode sobrepôr o método atualizarSolicitacao mudando o tipo de retorno dele de void para int.
Isso seria possível se você tivesse algo como:
classe X - public Object atualizarSolicitacao(Solicitacao sol)
classe que estende a X - public Integer atualizarSolicitacao(Solicitacao sol)
porque Integer é uma subclasse de Object (ou seja, Integer estende Object).
int é tipo primitivo, não estende de ninguem. Void estende de object e Integer de Number e Object.
Na classe pai, ele só tem que atualizar a solicitação mesmo.
Na classe filha, além da atualização, ele retorna o id da movimentação feita. Este valor será necessário para verificações em outros métodos que chamam estes métodos descritos.
A mensagem que o netbeans emite é:
[quote]atualizarSolicitacao(Solicitacao) in y cannot override atualizarSolicitacao(Solicitacao) in x
return type int is not compatible with void
Uma forma rápida de resolver isso é fazer o método da classe pai ter retorno int e sempre retornar -1, ou algo assim.
Mas assim vc não vai ganhar nenhum prêmio de boas práticas…
Sei. De qualquer maneira, a mensagem “is not compatible” é uma forma de dizer que um método que retorna void não pode ser sobreposto por um que retorna int.
Há duas maneiras de resolver o seu problema:
a) Alterar a assinatura do método da classe pai para que também retorne int (ou Object, ou algum objeto de status), e
b) Criar mais um método na classe filha, que pode ser chamado pela classe que chama o método “atualizarSolicitacao”, que retorne só o tal id da modificação feita. Eu, em particular, acho isso um pouco frágil e desajeitado.