2010-09-01 19 views
9

Sto usando JDK1.6. Quando si implementa un'interfaccia e nella classe di implementazione, se si fornisce @override prima dei nomi delle funzioni, Eclipse genera un errore di compilazione. il codice qui sotto è errato secondo Eclipse.annotazione @override in JDK 1.6

public class SomeListener implements ServletContextListener { 
    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 
     // code 
    } 
    /* other overridden methods here */ 
} 

Se rimuovo @Override annotazione, quindi il codice compila bene. Significa che JDK1.6 non richiede più di anteporre l'annotazione @override?

+1

cosa, in particolare, è l'eclissi di errore ti dà? – nos

+1

Sei assolutamente certo che stai sovrascrivendo il metodo e non sovraccaricandolo? –

+0

Messaggio di errore di Eclipse: il metodo contextDestroyed (ServletContextEvent) di tipo OgnlListener deve sostituire un metodo superclasse – Veera

risposta

27

Probabilmente è necessario impostare il livello di conformità del compilatore in eclissi. Questo può essere trovato in Finestra-> Preferenze-> Java-> Compilatore

Se le preferenze del compilatore sono ancora impostate su 1.5 il compilatore annullerà l'annotazione di sovrascrittura.

Modifica: controlla anche il livello di conformità del compilatore in base al progetto se è stato impostato su un valore diverso da quello predefinito.

+0

+1: Sono appena stato bruciato da questo. Apparentemente uno dei miei colleghi che usa Eclipse ha il suo progetto impostato su 1.6, nonostante Maven abbia impostato la versione del compilatore su 1.5 (e io usando m2e per importarlo come progetto Maven ...). – Powerlord

+0

Nel mio caso è stato perché nel pom.xml, per la compilazione di maven, il plugin maven-compiler-plugin è stato configurato per funzionare con la versione 1.5 di java source e target. Cambiando i valori per i seguenti riparato: org.apache.maven.plugins maven-compilatore-plugin 2.3.2 1,6 1,6

0

JDK1.6 sicuramente lo supporta. Non sono sicuro del motivo per cui avresti problemi.

Che errore stai vedendo? L'unica cosa che posso pensare è assicurarsi di utilizzare il JDK corretto nelle impostazioni del progetto. Forse stai compilando un vecchio JDK?

+0

Questo dovrebbe essere un commento alla domanda. –

0

No l'annotazione @Override è ancora utilizzata. È necessario verificare che il metodo contextDestroyed sia realmente presente nell'interfaccia ServletContextListener e controllare il pacchetto importato per questa interfaccia.

0

Suona come il compilatore è impostato per Java 5, quando @Override su interfacce non era consentito.

2

Le impostazioni del compilatore Java possono essere in più posizioni in base alla configurazione scelta, Un modo è per Finestra-> Preferenze-> Java-> Compilatore, modificare quello a 1,6 minimo, se era impostato su una versione precedente . Un altro modo è fare clic destro su Progetto-> Proprietà -> Compilatore Java -> Conformità JDK -> Selezionare minimo JDK1.6, fare clic su Applica.

Dopo aver apportato le modifiche, lasciare che il progetto si sviluppi, costruisca e apporti le modifiche.

Se nessuna delle opzioni di cui sopra funziona - Provare ad aggiungere rt.jar a classpath, risolverà il problema.

1

L'annotazione @Override modificata nella versione 1.6 di Java. In Java 1.5, il compilatore non ha permesso l'annotazione @Override sui metodi di interfaccia implementati, a partire dalla versione 1.6.

Java Compiler

È necessario cambiare versione del compilatore java nelle proprietà del progetto -> Java Compiler

Problemi correlati