Por que o Eclipse reclama de @Override nos métodos de interface?

134

Eu tenho um projeto existente que usa @Overridemétodos que substituem métodos de interface , em vez de métodos de superclasse. Não posso alterar isso no código, mas gostaria que o Eclpse parasse de reclamar da anotação, pois ainda posso criar com o Maven.

Como eu desabilitaria esse erro?

Nota: Devido aos requisitos do projeto, preciso compilar para o Java 1.5.

Stefan Kendall
fonte
Mas parece que a fonte está direcionada para Java 6?
Akarnokd
De fato. O Java 5 era um requisito tardio para o suporte ao mac.
Stefan Kendall

Respostas:

268

O uso da @Overrideanotação nos métodos que implementam os declarados por uma interface é válido apenas a partir do Java 6. É um erro no Java 5.

Verifique se seus projetos IDE estão configurados para usar um Java 6 JRE e se a "compatibilidade de origem" está definida como 1.6 ou superior:

  1. Abra a janela> Preferências
  2. Navegue para Java> Compilador.
  3. Lá, defina o "nível de conformidade do compilador" como 1,6.

Lembre-se de que o Eclipse pode substituir essas configurações globais para um projeto específico, portanto verifique-as também.


Atualizar:

O erro no Java 5 não é apenas com o Eclipse; o uso javacdireto da linha de comando fornecerá o mesmo erro. Não é um código-fonte Java 5 válido.

No entanto, você pode especificar a -target 1.5opção para JDK 6 javac, que produzirá um arquivo de classe da versão Java 5 a partir do código-fonte Java 6.

erickson
fonte
Não, não vai. Ele produzirá uma mensagem de erro "javac: source release 1.6 requer target release 1.6".
22610 Michael Borgwardt
9
Não, não vai. Ele produzirá um arquivo de classe compilado. Ele só fornece esse erro se você especificar a opção -source 1.6, que não é necessária para fazer isso funcionar.
21720
Você sabe, desde que eu construo manualmente de qualquer maneira, posso simplesmente deixar o nível da fonte em 1.6. Não consegui fazer nenhum tipo de configuração mista funcionar, e isso parece mais simples.
Stefan Kendall
@erickson o downgrade -target -source também funciona para 1,7 a 1,6? stackoverflow.com/q/8869869/632951
Pacerier
Isso não parece funcionar com o 1.8 JDK. -source 1.6 -target 1.5 diz: javac: liberação fonte 1,6 requer versão alvo 1.6
Don escotilha
39

Faça o seguinte:

Projeto -> Propriedades -> compilador java ->

  • Ativar configurações específicas do projeto - 'yes'
  • Conformidade do compilador - 1.6
  • arquivos de classe gerados e compatibilidade de origem - 1.5
mitko
fonte
Graças - não sabia que cada projeto também tem suas próprias configurações
whostolemyhat
2
no meu caso, eu precisava desativar essa opção.
Muten Roshi 15/10
12

Verifique também se o projeto tem faceta. A versão java pode ser substituída por lá.

gdoumenc
fonte
1
Ponto! Você estava certo, minha faceta do projeto estava substituindo as configurações globais de conformidade. Obrigado!
bpawlowski
9

As configurações específicas do projeto podem estar ativadas. Escolha seu projeto Project > Properties > Java Compiler, unchecko Enable project specific settingsou a mudança Jdk 1.6e acima não esquecendo o correspondente JRE.
Incase ele não funcionar, retire o seu projecto de eclipse, apagar .settings folders, .project, .classpatharquivos. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your projecte eclipse. Funcionou para mim

Henry
fonte
7

Você pode alterar as configurações do compilador para aceitar a sintaxe do Java 6, mas gerar a saída do Java 5 (como eu me lembro). E defina a "Compatibilidade de arquivos de classe gerada" um pouco mais baixa, se necessário pelo seu tempo de execução. Atualização : verifiquei o Eclipse, mas ele reclama se eu configuro a compatibilidade de origem como 1.6 e a compatibilidade de classe como 1.5. Se 1.6 não for permitido, costumo comentar manualmente as anotações ofensivas do @Override na fonte (o que não ajuda no seu caso).

Atualização2: Se você fizer apenas a compilação manual, poderá escrever um pequeno programa que copie o projeto original em um novo, retire as anotações @Override das fontes java e basta clicar em Limpar projeto no Eclipse.

akarnokd
fonte
Você pode fornecer algum detalhe?
Stefan Kendall
Está na mesma página, conforme indicado por erickson.
akarnokd 12/06/09
O projeto tem vários GB de tamanho. Uma simples "cópia" nem sequer é prática. : /
Stefan Kendall
Nesse caso, você precisará solicitar permissão de alteração. Ou crie uma ramificação para as fontes compatíveis com 1.5 e corrija manualmente os arquivos java.
Akarnokd 12/06/09
1

Você também pode tentar o Retroweaver para criar a versão Java5 das classes Java6.


fonte
1

Use o Eclipse para procurar e substituir (remover) todas as instâncias de "@Override". Em seguida, adicione novamente as substituições que não são da interface usando "Limpar".

Passos:

  1. Selecione os projetos ou pastas que contêm seus arquivos de origem.
  2. Vá para "Pesquisar> Pesquisar ..." (Ctrl-H) para exibir a caixa de diálogo Pesquisar.
  3. Vá para a guia "Pesquisa de arquivo".
  4. Digite "@Override" em "Contendo texto" e "* .java" em "Padrões de nome de arquivo". Clique em "Substituir ..." e depois em "OK" para remover todas as instâncias de "@Override".
  5. Vá para "Janela> Preferências> Java> Estilo de Código> Limpeza" e crie um novo perfil.
  6. Edite o perfil e desmarque tudo, exceto "Código ausente> Adicionar anotações ausentes> @ Substituição". Verifique se "Implementações de métodos de interface" está desmarcada.
  7. Selecione os projetos ou pastas que contêm seus arquivos de origem.
  8. Selecione "Origem> Limpar ..." (Alt + Shift + s, depois u) e, em seguida, "Concluir" para adicionar novamente as substituições que não são da interface.
Peter Tseng
fonte
0

Eu entendi o seu problema, mude seu jdk do seu jdk para maior que 1,5

Gen
fonte
0

A configuração de que os projetos IDE estão configurados para usar um Java 6 JRE ou superior às vezes não remove o erro do eclipse. Para mim, um reinício do IDE Eclipe ajudou.

IstaLibera
fonte
0

Mesmo depois de alterar a configuração de conformidade do compilador para 1.6 ou 1.7 na guia windows, em seguida, prefernces, java, compilador e definir a conformidade do compilador, eu ainda estava tendo esse problema. A idéia é que precisamos ir para a pasta do projeto, clicar com o botão direito do mouse em Java e definir a conformidade do compilador para 1.6 ou higer. Isso funcionou para mim.

Ranjan
fonte