Java: Является ли аннотация Override бесполезной в современных средах разработки? - PullRequest
4 голосов
/ 20 июня 2011

Это только я, или аннотация Override в Java на самом деле бесполезна при программировании в приличной IDE?

Да, я понимаю, что аннотация Override препятствует тому, чтобы я случайно не переопределил супер метод, неправильно написав имя метода или испортив параметры метода. Однако здравый смысл подсказывает мне, что в современных средах разработки это вряд ли произойдет по следующим причинам:

  • IDE показывает маркер (то есть маленький значок) в левой части редактора, который указывает, является ли метод переопределенным / переопределенным. Поэтому для отображения намерения переопределения не требуется явная аннотация Override.
  • Если я собираюсь переименовать метод и вижу такой маркер переопределения, я никогда, никогда не редактирую имя метода напрямую - я инстинктивно обращаюсь к сочетанию клавиш, которое открывает помощник по переименованию в IDE. Аналогично, если я намереваюсь изменить сигнатуру метода и вижу маркер переопределения, я инстинктивно использую помощник по сигнатуре метода IDE вместо того, чтобы делать это вручную (за исключением очень простых случаев). Таким образом, имена и сигнатуры методов почти всегда меняются правильно, поэтому добавление аннотаций Override становится (на мой взгляд) немного больше, чем параноидальная и бесполезная проверка безопасности - то же самое, что распространение «final» повсеместно.

Конечно, если вам нужно написать свой Java-код в Блокноте или чем-то еще, аннотация Override, очевидно, помогает. Но я хочу сказать, что в современной среде IDE повышение безопасности, обеспечиваемое этой аннотацией, не стоит снижения читабельности. Есть мнения?

Ответы [ 3 ]

6 голосов
/ 20 июня 2011

Если вы @Override что-то, что не переопределяется, это очевидно в IDE. Однако, если вы удаляете метод или изменяете его подпись в родительском объекте, не очевидно, что все места, которые использовали, переопределяют эту подпись метода. Использование IDE для выполнения удаления / изменения поможет, но вы можете не получить все ссылки, если нужный модуль / версия не извлечен и не использован.

6 голосов
/ 20 июня 2011

Ну, вы должны доверять себе, чтобы увидеть эти маркеры. В этом есть человеческий фактор, и люди подвержены ошибкам. Из личного опыта я часто склонен упускать из виду эти предупреждения и «маркеры». С другой стороны, компилятор гораздо более требователен, и если вы аннотируете метод с помощью Override, он гарантирует, что вы действительно переопределяете метод суперкласса.

2 голосов
/ 20 июня 2011

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

python dude: вы не упоминали сочетание клавиш (Ctrl-O в IntelliJ) при переопределении метода. Я никогда не печатаю сигнатуру метода, который переопределяю вручную, поэтому для начала не будет опечатки.

...