@ Переопределить при реализации - PullRequest
3 голосов
/ 25 июля 2010

Вы бы поместили аннотацию в методы класса реализации? Это служит какой-либо цели? Если вы набрали опечатку или ее нет, это ошибка компиляции.

Ответы [ 6 ]

10 голосов
/ 25 июля 2010

Хотя эту аннотацию не требуется использовать при переопределении метода, она помогает предотвратить ошибки.Если метод, отмеченный @Override, не может корректно переопределить метод в одном из его суперклассов, компилятор генерирует ошибку.
Лучше быстро потерпеть неудачу, скорее поймать ошибку, чем потом выяснить, что вы написали hashcode(), но вы намеревались написать hashCode().@Override помогает найти проблему раньше, чем позже.

Подобные вопросы по SO.

Также см. это .

4 голосов
/ 25 июля 2010

Это довольно полезно. Если метод, аннотированный @Override, на самом деле не переопределяет метод в суперклассе, вы получите ошибку компиляции.

Например, если у вас есть класс Foo и вы создаете метод:

@Override 
public boolean equals (Foo foo) { ... }

тогда вы получите ошибку во время компиляции, которая скажет вам, что equals (Foo foo) не переопределяет ни один метод в суперклассе Foo.

Современные IDE (например, IntelliJ) добавляют эту аннотацию автоматически при использовании некоторых функций генерации кода в IDE.

3 голосов
/ 25 июля 2010

Я предполагаю, что вы спрашиваете об аннотировании методов, которые определены в реализованном интерфейсе или как abstract в суперклассе. В этом случае вы правы в том, что опечатка в сигнатуре метода приведет к ошибке компиляции с @Override или без него. Тем не менее, я думаю, что аннотация по-прежнему полезна для явной пометки метода как реализации интерфейса. Если интерфейс когда-либо изменится, наличие аннотаций @Override для всех реализующих методов может помочь точно определить, какие сигнатуры методов были изменены и должны быть обновлены.

Что еще более важно, как mklhmnn упомянул в своем ответе, если метод будет удален из интерфейса, аннотация @Override в вашем классе реализации вызовет ошибку компиляции. Без аннотации вы можете не знать, что метод был удален из интерфейса, что может привести к незначительным ошибкам.

2 голосов
/ 25 июля 2010

Я им не пользуюсь и никогда не было проблем.Я не знаю, почему вдруг все начинают его использовать (Eclipse? Который я тоже не использую).

Рефакторинг не проблема, IDE проверяет это для вас в любом случае.

@ Overrideможет помочь читабельности кода, так что это будет понятно ЧЕЛОВЕКАМ, а не компиляторам.Хотя моя среда IDE также помечает методы переопределения графически, она не очень заметна, но суть остается, это то, что инструменты могут сделать для нас автоматически.

1 голос
/ 26 июля 2010

Я думаю, что это также приятно сделать для себя, как указание на то, что Javadoc находится в другом месте, вы не просто забыли это.

1 голос
/ 25 июля 2010

Пометка метода как @Override вызовет ошибку компиляции, если API изменится, поэтому супер метод больше недоступен.Может быть, в этом причина.

...