Чому 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, який не потрібен для роботи.
erickson

Ви знаєте, оскільки я все одно будую вручну, я можу просто залишити вихідний рівень на рівні 1,6. Я не міг змусити жодної змішаної конфігурації працювати, і це здається найпростішим.
Стефан Кендалл

@erickson чи працює пониження джерела -carget для 1,7 до 1,6 теж? stackoverflow.com/q/8869869/632951
Pacerier

Це, здається, не працює з 1.8 JDK. -source 1.6-targetget 1.5 говорить: javac: випуск джерела 1.6 вимагає цільового випуску 1.6
Don Hatch

39

Виконайте наступне:

Проект -> Властивості -> компілятор java ->

  • Увімкнути конкретні параметри проекту - "так"
  • Відповідність компілятора - 1.6
  • створені файли класів та сумісність із джерелами - 1.5

Дякую - не усвідомлював, що кожен проект також має свої власні налаштування
whostolemyhat

2
у моєму випадку мені потрібно було відключити цю опцію.
Мутен Роші

12

Перевірте також, чи проект має грані. Версія java там може бути відмінена.


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 у джерелі (що не допомагає вашому випадку).

Update2: Якщо ви робите лише збірку вручну, ви можете написати невелику програму, яка копіює оригінальний проект у новий, знімає анотації @Override з джерел Java, і ви просто натискаєте Очистити проект у Eclipse.


Чи можете ви надати якісь конкретні дані?
Стефан Кендалл

Він знаходиться на тій самій сторінці, що й заявлений 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. Виберіть "Джерело> Очистити ..." (Alt + Shift + s, потім u), а потім "Finish", щоб додати назад неінтерфейсні зміни.

0

Я зрозумів вашу проблему, змініть jdk з jdk на більший, ніж 1,5


0

Налаштувавши, що проекти IDE налаштовані на використання Java 6 JRE або вище, іноді не усувається помилка затемнення. Для мене допоміг перезапуск IDE Eclipe.


0

Навіть після зміни налаштування відповідності компілятора на 1,6 або 1,7 з вкладки Windows, потім переваг, потім java, потім компілятора та встановлення відповідності компілятора, у мене все ще виникало це питання. Ідея полягає в тому, що нам потрібно зайти в папку проекту, клацнути правою кнопкою миші, Java та встановити відповідність компілятора на 1,6 або вище. Це працювало для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.