2012-10-06 1 views
1

В репозитории, который был создан в Ubuntu Linux и скомпилирован в OpenJDK 6, при реализации LocationListener и SensorListener добавление тега выше унаследованных методов компилируется в порядке.Некоторые @Override показывают ошибки в Oracle Java, но не в OpenJDK

Но когда репо клонируется в систему Windows с Oracle Java, некоторые из @Override генерируют ошибки. Пример ниже: The method onAccuracyChanged(Sensor, int) of type ExpeditionActivity must override a superclass method

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

SO, это syactically правильно написать @Override над унаследованными методами интерфейса?

+0

В Java 1.5 вы можете использовать @Override для отметки методов, которые переопределяют методы суперкласса. Начиная с Java 1.6, вы можете пометить с ней методы, которые также реализуют интерфейс. – stefanglase

ответ

3

@Override ограничивается методами базового класса в JDK 5.

JDK 6 появилась возможность применять @Override интерфейс методов.

Eclipse должен быть настроен на использование уровня языка JDK6/JDK6 для использования методов интерфейса @Override.

Чтобы ответить на ваш вопрос, «да, если вы компилируете под JDK 6+».

+0

Спасибо за понимание. Я действительно рад, что столкнулся с этой ошибкой. Это заставило меня задуматься о различиях между внедрением унаследованного абстрактного метода и заменой метода базового класса. –

0

Я получаю его иногда. Не совсем уверен, в чем причина.

Несколько способов найти его. Возможно, некоторые из них будут работать на вас

  • Иногда это помогает просто удалить метод и его переписывание.
  • Убедитесь, что параметры и возвращаемое значение верны. Например, в Andrdid, когда вы расширяете AsyncTask, вы предоставляете расширенные параметры класса 3, на основе этих параметров вам необходимо переопределить методы с правильными параметрами и возвращаемым значением.
  • Если этот метод необходим для интерфейса/базового класса, попробуйте удалить этот метод. В интерфейсе/базовом классе появится ошибка. Наведите курсор мыши на него и выберите Add Unimplemented methods, это заставит eclipse добавлять эти методы, и вам нужно будет повторно заполнить тело, но ошибка исчезнет.

Я считаю, что это ошибка Eclipse, поскольку удаление аннотации @Override не влияет на код, код компилируется и работает правильно.

Успехов

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