Ошибка «Необходимо переопределить метод суперкласса» после импорта проекта в Eclipse
Заголовок: Проблема с переимпортом проектов в 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 ответ(ов)
Чтобы изменить уровень компилятора Java в Eclipse и исправить проблему с аннотацией методов интерфейсов, выполните следующие шаги:
Откройте ваши настройки проекта. Для этого щелкните правой кнопкой мыши по вашему проекту в окне "Project Explorer" и выберите "Properties".
Перейдите в раздел "Java Compiler". Убедитесь, что опция "Enable project specific settings" активирована, и установите уровень компилятора на 1.6.
Затем перейдите в раздел "Java Build Path" и убедитесь, что используемая версия JRE соответствует 1.6. Если это не так, выберите "Add Library...", затем "JRE System Library" и выберите версию JRE 1.6 из доступных.
Примените изменения и закройте настройки.
После этих шагов ваш проект должен использовать Java 1.6, и вы сможете успешно использовать аннотацию @Override
для методов, реализующих интерфейсы.
В Eclipse Galileo вам нужно зайти в меню Eclipse → Preferences, затем выбрать Java и Compiler в открывшемся диалоговом окне.
Даже если в настройках компилятора указано значение 1.6, проблема может всё равно возникать. Для её решения выберите ссылку "Configure Project Specific Settings..." и убедитесь, что для вашего проекта установлен уровень совместимости компилятора 1.5. Измените его на 1.6. Вам нужно будет сделать это для всех затронутых проектов.
Такое запутанное меню и интерфейс диалогов характерны для плохого дизайна пользовательского интерфейса Eclipse.
Если это случится с кем-то, кто пробовал как Alphazero, так и метод Пола, но ничего не сработало.
В моем случае Eclipse каким-то образом «кэшировал» ошибки компиляции, даже после выполнения действия Project > Clean...
Мне пришлось снять отметку с Project > Build Automatically, затем выполнить Project > Clean и снова собрать проект.
Также, если есть сомнения, попробуйте перезапустить Eclipse. Это может исправить много странных и необъяснимых ошибок.
Чтобы решить эту проблему, зайдите в свойства вашего проекта → Java компилятор → выберите уровень совместимости компилятора 1.6 → примените изменения.
Ответ Пола частично помог мне. Но у меня осталась одна ошибка. Поэтому, кроме этого, мне также пришлось зайти в Свойства → Фасеты проекта и там установить версию Java с 1.5 на 1.6.
Может, это поможет.
Не удается запустить Eclipse - Java был запущен, но вернул код завершения = 13
Как исправить 'android.os.NetworkOnMainThreadException'?
Почему в RecyclerView отсутствует onItemClickListener()?
Как вызвать метод с задержкой в Android
Как передать объект из одной активности в другую на Android