When do you use Java's @Override annotation and why?
Когда вы используете аннотацию Java @Override и почему?
Каковы наилучшие практики использования аннотации Java @Override и почему?
Кажется, было бы излишним отмечать каждый отдельный переопределенный метод с помощью @Override аннотации. Существуют ли определенные ситуации программирования, которые требуют использования @Override и другие, которые никогда не должны использовать @Override?
Переведено автоматически
Ответ 1
Используйте ее каждый раз, когда переопределяете метод, для получения двух преимуществ. Делайте это так, чтобы вы могли воспользоваться проверкой компилятора, чтобы убедиться, что вы действительно переопределяете метод, когда вы думаете, что это так. Таким образом, если вы совершите распространенную ошибку в написании имени метода с ошибками или неправильно подберете параметры, вы будете предупреждены, что ваш метод на самом деле переопределяет не так, как вы думаете. Во-вторых, это упрощает понимание вашего кода, потому что при перезаписи методов он становится более очевидным.
Кроме того, в Java 1.6 вы можете использовать ее, чтобы отметить, когда метод реализует интерфейс для получения тех же преимуществ. Я думаю, было бы лучше иметь отдельную аннотацию (например, @Implements), но это лучше, чем ничего.
Ответ 2
Я думаю, что это наиболее полезно в качестве напоминания во время компиляции о том, что целью метода является переопределение родительского метода. В качестве примера:
Вы часто будете видеть что-то вроде приведенного выше метода, который переопределяет метод в базовом классе. Это важная деталь реализации этого класса - мы не хотим, чтобы отображалась конфиденциальная информация.
Предположим, что этот метод изменен в родительском классе на
Это изменение не вызовет никаких ошибок во время компиляции или предупреждений, но оно полностью меняет предполагаемое поведение подкласса.
Чтобы ответить на ваш вопрос: вам следует использовать аннотацию @Override, если отсутствие метода с такой же сигнатурой в суперклассе указывает на ошибку.
Ответ 3
Здесь есть много хороших ответов, поэтому позвольте мне предложить другой способ взглянуть на это...
При написании кода нет излишеств. Вам ничего не стоит ввести @override, но экономия может быть огромной, если вы неправильно написали имя метода или немного перепутали подпись.
Подумайте об этом так: за то время, пока вы переходили сюда и печатали этот пост, вы потратили гораздо больше времени, чем потратите на ввод @override всю оставшуюся жизнь; но одна ошибка, которую это предотвратит, может сэкономить вам часы.
Java делает все возможное, чтобы убедиться, что вы не допустили никаких ошибок во время редактирования / компиляции, это практически бесплатный способ устранить целый класс ошибок, которые невозможно предотвратить никаким другим способом, кроме комплексного тестирования.
Не могли бы вы придумать лучший механизм в Java, гарантирующий, что когда пользователь намеревался переопределить метод, он действительно это делал?
Еще один приятный эффект заключается в том, что если вы не предоставите аннотацию, она предупредит вас во время компиляции, что вы случайно переопределили родительский метод - что-то, что могло бы быть значительным, если бы вы не собирались этого делать.
Ответ 4
Я всегда использую тег. Это простой флаг времени компиляции для обнаружения небольших ошибок, которые я могу допустить.
Он будет улавливать такие вещи, как tostring() вместо toString()