2010-09-01 5 views
9

Я использую JDK1.6. Когда я реализую интерфейс и в классе реализации, если я даю @override перед моими именами функций, Eclipse выдает ошибку компиляции. то есть код ниже неправильный в соответствии с Eclipse.@override аннотация в JDK 1.6

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

Если удалить @Override аннотацию, то код компилируется нормально. Означает ли это, что JDK1.6 не требует от нас предварительного добавления аннотации @override?

+1

Что, в частности, это затмение ошибка дает вам? – nos

+1

Вы абсолютно уверены, что на самом деле вы переопределяете метод, а не перегружаете его? –

+0

Сообщение об ошибке Eclipse: метод contextDestroyed (ServletContextEvent) типа OgnlListener должен переопределять метод суперкласса – Veera

ответ

27

Возможно, вам необходимо установить уровень соответствия компилятора в затмение. Это можно найти в Window-> Preferences-> Java-> Compiler

Если параметры компилятора по-прежнему равны 1,5, компилятор будет помечать аннотацию переопределения.

Редактировать: Также проверьте уровень соответствия компилятора на основе каждого проекта, если вы настроили его на все, кроме значения по умолчанию.

+0

+1: Я просто сожгла это. Очевидно, один из моих сотрудников, который использует Eclipse, имеет свой проект, равный 1,6, несмотря на то, что Maven установил версию компилятора на 1,5 (и я использовал m2e для импорта в качестве проекта Maven ...). – Powerlord

+0

В моем случае это было потому, что в pom.xml для maven build плагин maven-compiler-plugin был настроен на работу с исходным кодом и целью версии 1.5 версии. Изменение значения в нем следующих основных нем: org.apache.maven.plugins Maven-компилятор-плагин 2.3.2 <Конфигурация> 1,6 1,6

0

JDK1.6 определенно поддерживает его. Я не уверен, почему у вас возникнут проблемы.

Какая ошибка вы видите? Единственное, о чем я могу думать, это убедиться, что вы используете правильный JDK в своих настройках проекта. Может быть, вы компилируете против более старого JDK?

+0

Это должен быть комментарий к вопросу. –

0

Отсутствует аннотация @Override. Вы должны убедиться, что метод contextDestroyed действительно присутствует в интерфейсе ServletContextListener и проверьте импортированный пакет для этого интерфейса.

0

Похоже, ваш компилятор установлен на Java 5, когда @Override на интерфейсах не допускается.

2

Параметры компилятора Java могут быть в нескольких местах в зависимости от выбранной вами конфигурации. Один из способов - Window-> Preferences-> Java-> Compiler, изменить это на минимум 1.6, если он был установлен в более раннюю версию , Еще один способ: щелкнуть правой кнопкой мыши по проекту-> Свойства -> компилятор Java -> соответствие JDK -> выберите минимум JDK1.6, нажмите Apply.

После внесения изменений, пусть проект будет построен, он будет строить и вносить изменения в аффект.

Если ни одна из вышеперечисленных функций не работает - попробуйте добавить rt.jar в classpath, это устранит проблему.

1

Аннотации @Override изменены в версии Java 1.6. В Java 1.5 компилятор не разрешил аннотацию @Override для реализованных методов интерфейса, начиная с версии 1.6.

Java Compiler

Вы должны изменить Java версию компилятора в проекте свойства -> Java Compiler

Смежные вопросы