Erros 'Deve substituir um método de superclasse' após importar um projeto para o Eclipse

1251

Sempre que precisar reimportar meus projetos para o Eclipse (se eu reinstalar o Eclipse ou alterar a localização dos projetos), quase todos os meus métodos substituídos não serão formatados corretamente, causando o erro:

O método deve substituir um método de superclasse

Pode ser digno de nota mencionar que isso ocorre nos projetos Android por qualquer motivo, os valores dos argumentos do método nem sempre são preenchidos, portanto, eu mesmo preciso preenchê-los manualmente. Por exemplo:

list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

    //These arguments have their correct names
    public void onCreateContextMenu(ContextMenu menu, View v, 
                                    ContextMenuInfo menuInfo) {                 
    }

});

será inicialmente preenchido assim:

list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

    //This methods arguments were not automatically provided    
    public void onCreateContextMenu(ContextMenu arg1, View arg2,
                                    ContextMenuInfo arg3) {
    }

});

O estranho é que, se eu remover meu código e o Eclipse recriar automaticamente o método, ele usará os mesmos nomes de argumento que eu já tinha, então não sei realmente onde está o problema, senão ele formata automaticamente o método para mim.

Isso se torna bastante trabalhoso, tendo que recriar manualmente TODOS os meus métodos substituídos à mão. Se alguém puder explicar por que isso acontece ou como corrigi-lo. Eu ficaria muito feliz.

Talvez seja devido à maneira como estou formatando os métodos, que estão dentro de um argumento de outro método?

Tim H
fonte
1
Por favor, verifique este item, ele explica o uso de substituição. Eu acredito que esta prática é muito importante para tudo, não apenas para esta situação em particular. stackoverflow.com/questions/94361/…
oagostinho

Respostas:

1433

O Eclipse está padronizado para Java 1.5 e você tem classes implementando métodos de interface (nos quais o Java 1.6 pode ser anotado @Override, mas no Java 1.5 só pode ser aplicado a métodos que substituem um método de superclasse).

Vá para as preferências do seu projeto / IDE e defina o nível do compilador Java como 1.6 e também certifique-se de selecionar o JRE 1.6 para executar seu programa no Eclipse.

alphazero
fonte
35
Meu projeto foi definido como 1,6, então eu atirei nas estrelas e o configurei em 1,5, reconstruído e depois em 1,6. Milagrosamente, isso resolveu meu problema. Obrigado por me apontar na direção certa!
Michael Krauklis
6
tendo o mesmo problema ... tentei a sugestão dada nesta resposta, mas ainda não obteve êxito. :( :(
aditya_gaur
6
@MichaelKrauklis Tenho 1,6 e estou tendo esse problema. Eu configurei para 1.5 e limpei e voltei para 1.6 e limpei novamente. Ainda não resolvido. Alguma ideia?
Pacerier 13/02/12
6
Mesmo problema aqui, no meu caso, eu não havia instalado o JDK 1.6, apenas o 1.7 mais recente, que aparentemente não funciona com o Android. Instalar o mais velho 1.6 e, em seguida, seguir estas instruções, deve funcionar :)
NoBugs
4
Deve-se mencionar (como nos comentários das outras respostas) uma compilação limpa seguida por uma reinicialização geralmente é necessária.
gsingh2011
308

Com o Eclipse Galileo, você acessa o item de menu Eclipse -> Preferences e, em seguida, seleciona Java e Compiler na caixa de diálogo.

Agora, ele ainda pode mostrar o nível de conformidade do compilador em 1.6, mas você ainda vê esse problema. Então agora selecione o link " Definir configurações específicas do projeto ... " e verá que o projeto está definido como 1,5, agora mude para 1,6. Você precisará fazer isso para todos os projetos afetados.

Essa interface de menu / diálogo bizantina é típica do mau design da interface do Eclipse.

Paulo
fonte
78

Caso isso aconteça com mais alguém que tentou o alphazero e o método de Paul e ainda não funcionou.

Para mim, o eclipse de alguma forma 'armazenou em cache' os erros de compilação, mesmo depois de executar um Projeto> Limpar ...

Eu tive que desmarcar Projeto> Compilar automaticamente, executar um Projeto> Limpar e compilar novamente.

Além disso, em caso de dúvida, tente reiniciar o Eclipse . Isso pode corrigir muitos erros estranhos e inexplicáveis.

Rollin_s
fonte
4
Eu não apenas fiz isso, mas desmarquei a opção "Iniciar uma compilação automaticamente" na caixa de diálogo Limpar. Só então funcionou para mim.
Wilerson
3
Eu tive que reiniciar o eclipse também, mesmo depois de excluir os erros.
Dave Cameron
42

Para resolver esse problema, acesse Propriedades do projeto -> compilador Java -> selecione o nível de conformidade do compilador para 1.6-> Aplicar.

false9striker
fonte
22

A resposta de Paul funcionou para mim parcialmente. Eu ainda tinha um erro então. Então, além disso, eu também tive que ir para Propriedades-> Facetas do projeto e definir a versão do Java de 1.5 para 1.6.

Talvez isso ajude.

Ulrich
fonte
14

Pessoal, no meu caso, nenhuma das soluções acima funcionou.

Eu tive que excluir os arquivos no espaço de trabalho do projeto:

  • .projeto
  • .classpath

E a pasta:

  • .definições

Depois copiei os de um projeto semelhante que estava funcionando antes. Isso conseguiu consertar meu projeto quebrado.

Obviamente, não use esse método antes de tentar as alternativas anteriores !.

will824
fonte
14

Se nada do exposto ajudar, verifique se você selecionou um " Ambiente de execução " adequado , e não um "JRE alternativo".

Para ser encontrado em:

Projeto -> Caminho da Construção -> Bibliotecas

Selecione JRE System Librarye clique Edit....

Se "JRE alternativo ..." estiver selecionado, altere-o para um "Ambiente de execução" apropriado JavaSE-1.8 (jre1.8.0_60). Não faço ideia do porquê, mas isso vai resolver.

phil294
fonte
2
Selecionei um "Ambiente de execução", pressionei OK e o erro desapareceu. Então voltei para o mesmo diálogo e selecionei "JRE padrão da área de trabalho (...)", que era minha seleção anterior quando recebi o erro do Eclipse, pressionei OK e o erro não aconteceu?!? Este deve ser um bug Eclipse UI ou algo assim (eu estou em Eclipse Neon 4.6.2)
mljrg
11

Esta é a segunda vez que encontro esse problema. primeira vez, de acordo com a recomendação do alphazero, funcionou. mas na segunda vez que defino para 1.6, não funciona exatamente como 'CACHE' esse erro após a limpeza e a reconstrução.

Tente desativar 'Build Automaticamente', como Rollin_s disse -> erro ainda aqui!

Então, removi o projeto do problema (já definido como 1.6) do Package Explorer e importe-o novamente -> inicie uma reconstrução e sem erros desta vez

Espero que isso ajude alguém

ob.yann
fonte
10

A correção deve substituir um erro de método de superclasse não é difícil. Você só precisa alterar a versão de origem Java para 1.6, pois a anotação Java 1.6 @Override pode ser usada junto com o método de interface. Para alterar a versão de origem para 1.6, siga as etapas abaixo:

  1. Selecione Projeto, Clique com o botão direito, Propriedades
  2. Selecione Java Compiler e marque a caixa de seleção "Ativar configurações específicas do projeto"
  3. Agora faça o nível de conformidade do compilador para 1.6
  4. Aplicar mudanças
Sunil
fonte
10

No meu caso, esse problema ocorreu quando importei um projeto Maven para o Eclipse. Para resolver isso, adicionei o seguinte em pom.xml:

<properties>
   ...
   <maven.compiler.source>1.8</maven.compiler.source>
   <maven.compiler.target>1.8</maven.compiler.target>
</properties>

Em seguida, no menu de contexto do projeto, vá para "Maven -> Atualizar projeto ..." e pressione OK.

É isso aí. Espero que isto ajude.

mljrg
fonte
Obrigado, acho que isso substitui a configuração do pom pai ou algo assim. (I ad o problema o contrário, não há problema de eclipse, mas compilador do Maven me jogou "deve substituir etc.")
Asoub
6

No meu caso, nenhuma das soluções acima funciona. Eu tenho que fazer checkout do meu código fonte para outra pasta. No eclipse, selecione Arquivo> Alternar espaços de trabalho> Outro ... e importe o código para os novos espaços de trabalho. funciona depois disso.

Hắc Huyền Minh
fonte
2

Isso acontece quando o projeto maven usa diferentes níveis de conformidade do compilador e o Eclipse IDE usa diferentes níveis de conformidade do compilador. Para corrigir isso, precisamos alterar o nível de conformidade do compilador do projeto Maven para o nível que o IDE usa.

1) Para ver os usos do nível de conformidade do compilador Java no Eclipse IDE

*) Janela -> Preferências -> Compilador -> Nível de conformidade do compilador: 1.8 (ou 1.7, 1.6, ect)

2) Para alterar o nível de conformidade do compilador Java do projeto Maven

*) Vá para "Projeto" -> "Propriedades" -> selecione "Java Compiler" -> Altere o nível de conformidade do compilador: 1.8 (ou 1.7, 1.6 ,, ect)

HashanR
fonte