Perché Eclipse si lamenta di @Override sui metodi di interfaccia?


134

Ho un progetto esistente che utilizza @Overridemetodi che sostituiscono i metodi di interfaccia , piuttosto che i metodi di superclasse. Non posso modificarlo nel codice, ma vorrei che Eclpse smettesse di lamentarmi dell'annotazione, dato che posso ancora costruire con Maven.

Come farei per disabilitare questo errore?

Nota: a causa dei requisiti del progetto, devo compilare per Java 1.5.


Ma sembra che la fonte sia indirizzata a Java 6?
Akarnokd,

Infatti. Java 5 era un requisito tardivo per il supporto mac.
Stefan Kendall,

Risposte:


268

L'uso @Overridedell'annotazione sui metodi che implementano quelli dichiarati da un'interfaccia è valido solo da Java 6 in poi. È un errore in Java 5.

Assicurarsi che i progetti IDE siano configurati per l'utilizzo di un Java 6 JRE e che la "compatibilità dei sorgenti" sia impostata su 1.6 o versione successiva:

  1. Apri la finestra> Finestra di dialogo Preferenze
  2. Passare a Java> Compilatore.
  3. Lì, imposta il "Livello di conformità del compilatore" su 1.6.

Ricorda che Eclipse può sostituire queste impostazioni globali per un progetto specifico, quindi controlla anche quelle.


Aggiornare:

L'errore in Java 5 non è solo con Eclipse; l'utilizzo javacdirettamente dalla riga di comando ti darà lo stesso errore. Non è un codice sorgente Java 5 valido.

Tuttavia, è possibile specificare l' -target 1.5opzione per JDK 6 javac, che produrrà un file di classe versione Java 5 dal codice sorgente Java 6.


No, non lo farà. Verrà visualizzato un messaggio di errore "javac: la versione 1.6 di origine richiede la versione 1.6 di destinazione".
Michael Borgwardt,

9
No, non lo farà. Produrrà un file di classe compilato. Dà quell'errore solo se specifichi l'opzione -source 1.6, che non è necessaria per farlo funzionare.
Erickson,

Sai, dato che costruisco manualmente comunque, posso semplicemente lasciare il livello sorgente a 1.6. Non sono riuscito a ottenere alcun tipo di configurazione mista funzionante e questo sembra più semplice.
Stefan Kendall,

@erickson il downgrade di -target -source funziona anche dall'1.7 all'1.6? stackoverflow.com/q/8869869/632951
Pacerier

Questo non sembra funzionare con il JDK 1.8. -source 1.6 -target 1.5 dice: javac: la versione sorgente 1.6 richiede la versione target 1.6
Don Hatch,

39

Fai come segue:

Progetto -> Proprietà -> compilatore java ->

  • Abilita impostazioni specifiche del progetto - "sì"
  • Conformità del compilatore - 1.6
  • file di classe generati e compatibilità dei sorgenti - 1.5

Grazie - non ho realizzato che ogni progetto ha anche le sue impostazioni
tutto il

2
nel mio caso avevo bisogno di disabilitare questa opzione.
Muten Roshi,

12

Controlla anche se il progetto ha delle sfaccettature. La versione java potrebbe essere sostituita lì.


1
Punto! Avevi ragione, il mio aspetto del progetto stava scavalcando le impostazioni di conformità globali. Grazie!
bpawlowski,

9

È possibile abilitare le impostazioni specifiche del progetto. Seleziona il tuo progetto Project > Properties > Java Compiler, uncheckil Enable project specific settingso cambia Jdk 1.6e sopra senza dimenticare il corrispondente JRE.
Incase non funziona, rimuovere il progetto da Eclipse, eliminare .settings folders, .project, .classpathi file. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your projected eclissi. Ha funzionato per me


7

È possibile modificare le impostazioni del compilatore per accettare la sintassi Java 6 ma generare output Java 5 (come ricordo). E imposta la "Compatibilità dei file di classe generati" un po 'più bassa se necessario dal tuo runtime. Aggiornamento : ho controllato Eclipse, ma mi lamento se ho impostato la compatibilità dei sorgenti su 1.6 e la compatibilità delle classi su 1.5. Se la 1.6 non è consentita, di solito commento manualmente le annotazioni offensive di @Override nella fonte (che non aiuta il tuo caso).

Update2: se esegui solo la compilazione manuale, potresti scrivere un piccolo programma che copia il progetto originale in uno nuovo, elimina le annotazioni di @Orride dalle fonti Java e hai appena premuto Clean project in Eclipse.


Potete fornire qualche dettaglio?
Stefan Kendall,

Si trova sulla stessa pagina dichiarata da Erickson.
Akarnokd,

Il progetto ha una dimensione di diversi GB. Una semplice "copia" non è nemmeno pratica. : /
Stefan Kendall,

In questo caso, dovrai richiedere l'autorizzazione al cambiamento. Oppure crea un ramo per le fonti compatibili 1.5 e correggi manualmente i file java.
Akarnokd,

1

Potete anche provare Retroweaver per creare la versione Java5 dalle classi Java6.


1

Utilizzare Eclipse per cercare e sostituire (rimuovere) tutte le istanze di "@Override". Quindi aggiungere nuovamente le sostituzioni senza interfaccia utilizzando "Pulizia".

passi:

  1. Seleziona i progetti o le cartelle contenenti i tuoi file sorgente.
  2. Vai su "Cerca> Cerca ..." (Ctrl-H) per visualizzare la finestra di dialogo Cerca.
  3. Vai alla scheda "Ricerca file".
  4. Immettere "@Override" in "Contenenti testo" e "* .java" in "Modelli di nome file". Fai clic su "Sostituisci ...", quindi su "OK", per rimuovere tutte le istanze di "@Override".
  5. Vai su "Finestra> Preferenze> Java> Stile codice> Pulizia" e crea un nuovo profilo.
  6. Modifica il profilo e deseleziona tutto tranne "Codice mancante> Aggiungi annotazioni mancanti> @Override". Assicurarsi che "Implementazioni di metodi di interfaccia" non sia selezionato.
  7. Seleziona i progetti o le cartelle contenenti i tuoi file sorgente.
  8. Seleziona "Origine> Pulizia ..." (Alt + Maiusc + s, quindi u), quindi "Fine" per aggiungere nuovamente le sostituzioni non di interfaccia.

0

Ho capito il tuo problema, cambia il tuo jdk dal tuo jdk a maggiore di 1.5


0

Configurando che i progetti IDE sono configurati per utilizzare un Java 6 JRE o superiore, a volte non si rimuove l'errore di eclissi. Per me ha aiutato un riavvio dell'IDE Eclipe.


0

Anche dopo aver modificato l'impostazione di conformità del compilatore su 1.6 o 1.7 dalla scheda Windows, quindi preferisce, quindi Java, quindi il compilatore e l'impostazione della conformità del compilatore, continuavo a riscontrare questo problema. L'idea è che dobbiamo andare nella cartella del progetto, fare clic con il tasto destro, Java e impostare la conformità del compilatore su 1.6 o su higer. Questo ha funzionato per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.