Компилятор и процессор аннотаций @Override
в порядке.Во время компиляции с использованием javac (в командной строке) для метода обновления BeanDaoImpl
class отображается следующее сообщение:
update (info.example.Bean) в info.example.BeanDaoImpl не можетреализовать обновление (T) в info.example.CrudDao;попытка назначить более слабые права доступа;был общедоступным
, и причина в том, что метод update
в CrudDao на самом деле публичный.Согласно Спецификация языка Java :
Каждое объявление метода в теле интерфейса неявно общедоступно.
И при создании BeanDaoImpl.update
метод public, сообщение об ошибке исчезает.То же самое относится и к аналогичным сообщениям об ошибках других методов.
Существует также проблема с настройками проекта Eclipse.Просто потому, что вы используете JDK 1.6 для запуска Eclipse, вам не нужно, чтобы компилятор автоматически не жаловался на обработку аннотаций @Override
.Вам нужно будет установить Compiler compliance level
проекта на 1.6 на панели Java Compiler
настроек вашего проекта.Значение 1,5 приведет к тому, что процессор аннотаций Eclipse будет жаловаться на нереализованные методы, когда на самом деле эти методы были реализованы, но объявлены в суперинтерфейсе, как в вашем случае.
Проблема с компиляторомНастройки уровня соответствия частично связаны с первоначальной @Override
спецификацией - она была ограничена только суперклассами и не включала интерфейсы в качестве супертипа.Это было исправлено в Java 6, но документация не была обновлена .Уровень соответствия компилятора 1,5 заставляет процессор аннотаций Eclipse обрабатывать аннотированные методы @Override
как те, которые требуют существования в суперклассе, а не в супертипе.