13

Ошибка «Необходимо переопределить метод суперкласса» после импорта проекта в Eclipse

10

Заголовок: Проблема с переимпортом проектов в Eclipse: некорректное форматирование переопределённых методов

Описание проблемы: Каждый раз, когда я переимпортирую свои проекты в Eclipse (после переустановки Eclipse или изменения расположения проектов), почти все мои переопределённые методы форматируются неверно, из-за чего возникает ошибка:

Метод должен переопределять метод суперкласса

Стоит отметить, что это происходит в проектах для Android, и по какой-то причине значения аргументов методов не всегда заполняются автоматически, поэтому мне приходится делать это вручную. Например:

list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

    // Эти аргументы имеют правильные имена
    public void onCreateContextMenu(ContextMenu menu, View v, 
                                    ContextMenuInfo menuInfo) {                 
    }

});

Сначала они заполняются так:

list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

    // Аргументы этого метода не были автоматически предоставлены    
    public void onCreateContextMenu(ContextMenu arg1, View arg2,
                                    ContextMenuInfo arg3) {
    }

});

Странно, но если я удаляю свой код и позволяю Eclipse автоматически воссоздать метод, он использует те же имена аргументов, которые у меня уже были, так что я не знаю, в чём проблема, кроме автоматического форматирования метода.

Это становится настоящей проблемой — приходится вручную восстанавливать ВСЕ мои переопределённые методы. Если кто-то может объяснить, почему это происходит или как это исправить, я был бы очень признателен.

Возможно, это связано с тем, как я форматирую методы, которые находятся внутри аргумента другого метода?

5 ответ(ов)

14

Чтобы изменить уровень компилятора Java в Eclipse и исправить проблему с аннотацией методов интерфейсов, выполните следующие шаги:

  1. Откройте ваши настройки проекта. Для этого щелкните правой кнопкой мыши по вашему проекту в окне "Project Explorer" и выберите "Properties".

  2. Перейдите в раздел "Java Compiler". Убедитесь, что опция "Enable project specific settings" активирована, и установите уровень компилятора на 1.6.

  3. Затем перейдите в раздел "Java Build Path" и убедитесь, что используемая версия JRE соответствует 1.6. Если это не так, выберите "Add Library...", затем "JRE System Library" и выберите версию JRE 1.6 из доступных.

  4. Примените изменения и закройте настройки.

После этих шагов ваш проект должен использовать Java 1.6, и вы сможете успешно использовать аннотацию @Override для методов, реализующих интерфейсы.

3

В Eclipse Galileo вам нужно зайти в меню Eclipse → Preferences, затем выбрать Java и Compiler в открывшемся диалоговом окне.

Даже если в настройках компилятора указано значение 1.6, проблема может всё равно возникать. Для её решения выберите ссылку "Configure Project Specific Settings..." и убедитесь, что для вашего проекта установлен уровень совместимости компилятора 1.5. Измените его на 1.6. Вам нужно будет сделать это для всех затронутых проектов.

Такое запутанное меню и интерфейс диалогов характерны для плохого дизайна пользовательского интерфейса Eclipse.

0

Если это случится с кем-то, кто пробовал как Alphazero, так и метод Пола, но ничего не сработало.

В моем случае Eclipse каким-то образом «кэшировал» ошибки компиляции, даже после выполнения действия Project > Clean...

Мне пришлось снять отметку с Project > Build Automatically, затем выполнить Project > Clean и снова собрать проект.

Также, если есть сомнения, попробуйте перезапустить Eclipse. Это может исправить много странных и необъяснимых ошибок.

0

Чтобы решить эту проблему, зайдите в свойства вашего проекта → Java компилятор → выберите уровень совместимости компилятора 1.6 → примените изменения.

0

Ответ Пола частично помог мне. Но у меня осталась одна ошибка. Поэтому, кроме этого, мне также пришлось зайти в Свойства → Фасеты проекта и там установить версию Java с 1.5 на 1.6.

Может, это поможет.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь