Почему Eclipse жалуется на @Override в интерфейсных методах?

134

У меня есть существующий проект, который использует @Overrideметоды, которые переопределяют методы интерфейса , а не методы суперкласса. Я не могу изменить это в коде, но я бы хотел, чтобы Eclpse прекратил жаловаться на аннотацию, поскольку я все еще могу строить с Maven.

Как бы я отключил эту ошибку?

Примечание: из-за требований проекта, мне нужно скомпилировать для Java 1.5.

Стефан Кендалл
источник
Но похоже источник нацелен на Java 6?
akarnokd
На самом деле. Java 5 была поздним требованием для поддержки Mac.
Стефан Кендалл

Ответы:

268

Использование @Overrideаннотации для методов, реализующих методы, объявленные интерфейсом, допустимо только в Java 6 и более поздних версиях. Это ошибка в Java 5.

Убедитесь, что ваши проекты IDE настроены на использование Java 6 JRE и что «совместимость с исходным кодом» установлена ​​на 1.6 или выше:

  1. Откройте диалоговое окно «Окно»> «Настройки»
  2. Перейдите к Java> Компилятор.
  3. Там установите «Уровень соответствия компилятора» на 1.6.

Помните, что Eclipse может переопределить эти глобальные настройки для конкретного проекта, поэтому проверьте их тоже.


Обновить:

Ошибка в Java 5 не только в Eclipse; использование javacнепосредственно из командной строки выдаст вам ту же ошибку. Это не правильный исходный код Java 5.

Однако вы можете указать -target 1.5опцию для JDK 6 javac, которая будет производить файл класса версии Java 5 из исходного кода Java 6.

Эриксон
источник
Нет не будет Появится сообщение об ошибке «javac: исходный выпуск 1.6 требует целевой выпуск 1.6».
Майкл Боргвардт
9
Нет не будет Это создаст скомпилированный файл класса. Эта ошибка появляется, только если вы укажете опцию -source 1.6, которая не обязательна для этой работы.
Эриксон
Вы знаете, поскольку я все равно собираю вручную, я могу просто оставить исходный уровень на уровне 1.6. Я не мог заставить работать какую-либо смешанную конфигурацию, и это кажется самым простым.
Стефан Кендалл
@erickson работает ли -target -source downgrade и с 1,7 до 1,6? stackoverflow.com/q/8869869/632951
Pacerier
Это не похоже на работу с 1.8 JDK. - источник 1.6 - цель 1.5 говорит: javac: исходная версия 1.6 требует целевой версии 1.6
Дон Хэтч
39

Сделайте следующее:

Проект -> Свойства -> Java-компилятор ->

  • Включить настройки проекта - «да»
  • Соответствие компилятора - 1.6
  • сгенерированные файлы классов и совместимость с исходным кодом - 1,5
Митько
источник
Спасибо - не понял, у каждого проекта тоже есть свои настройки
whostolemyhat
2
в моем случае мне нужно было отключить эту опцию.
Мутен Роши
12

Проверьте также, есть ли у проекта аспект. Версия Java может быть переопределена там.

gdoumenc
источник
1
Гол! Вы были правы, мой аспект проекта переопределял глобальные параметры соответствия. Спасибо!
bpawlowski
9

Настройки проекта могут быть включены. Выберите проект Project > Properties > Java Compiler, uncheckв Enable project specific settingsили изменения Jdk 1.6и выше , не забывая соответствующий JRE.
Incase она не работает, удалить проект из затмений, удалять .settings folders, .project, .classpathфайлы. clean and build the project, import it back into eclipse and then reset your Java compiler. Clean and build your projectи затмение У меня сработало

Генри
источник
7

Вы можете изменить настройки компилятора так, чтобы он принимал синтаксис Java 6, но генерировал вывод Java 5 (насколько я помню). И установите «Совместимость с сгенерированными файлами классов» немного ниже, если это необходимо вашей средой выполнения. Обновление : я проверил Eclipse, но он жалуется, если я устанавливаю совместимость с исходниками на 1.6 и совместимость с классами на 1.5. Если 1.6 не разрешен, я обычно вручную закомментирую некорректные аннотации @Override в источнике (что не помогает вашему случаю).

Обновление 2: Если вы делаете только ручную сборку, вы можете написать небольшую программу, которая копирует исходный проект в новый, убирает аннотации @Override из исходных текстов Java, и вы просто нажимаете Очистить проект в Eclipse.

akarnokd
источник
Можете ли вы предоставить какие-либо подробности?
Стефан Кендалл
Это на той же странице, что и erickson.
akarnokd
Проект размером в несколько ГБ. Простая «копия» даже не практична. : /
Стефан Кендалл
В этом случае вам нужно будет запросить разрешение на изменение. Или создайте ветку для 1.5 совместимых источников и вручную исправьте файлы java.
akarnokd
1

Вы также можете попробовать Retroweaver для создания версии Java5 из классов Java6.


источник
1

Используйте Eclipse для поиска и замены (удаления) всех экземпляров «@Override». Затем добавьте обратно неинтерфейсные переопределения, используя «Очистить».

шаги:

  1. Выберите проекты или папки, содержащие ваши исходные файлы.
  2. Перейдите к «Поиск> Поиск ...» (Ctrl-H), чтобы открыть диалоговое окно поиска.
  3. Перейдите на вкладку «Поиск файлов».
  4. Введите "@Override" в "Содержащий текст" и "* .java" в "Шаблоны имен файлов". Нажмите «Заменить ...», затем «ОК», чтобы удалить все экземпляры «@Override».
  5. Перейдите в «Окно> Настройки> Java> Стиль кода> Очистить» и создайте новый профиль.
  6. Отредактируйте профиль и снимите все, кроме «Отсутствующий код> Добавить отсутствующие аннотации> @Override». Убедитесь, что «Реализация методов интерфейса» не отмечена.
  7. Выберите проекты или папки, содержащие ваши исходные файлы.
  8. Выберите «Source> Clean Up ...» (Alt + Shift + s, затем u), затем «Finish», чтобы добавить неинтерфейсные переопределения.
Питер Ценг
источник
0

Я понял вашу проблему, измените JDK с JDK на 1,5

Gen
источник
0

Конфигурирование того, что проекты IDE настроены на использование Java 6 JRE или выше, иногда не устраняет ошибку eclipse. Для меня перезапуск Eclipe IDE помог.

IstaLibera
источник
0

Даже после изменения параметра соответствия компилятора на вкладку Windows до 1.6 или 1.7, затем предпочтений, затем java, затем компилятора и настройки соответствия компилятора, у меня все еще была эта проблема. Идея заключается в том, что нам нужно перейти в папку проекта, щелкнуть правой кнопкой мыши по Java и установить соответствие компилятора на 1.6 или выше. Это сработало для меня.

Ranjan
источник