Чому java використовує примітку @Override замість модифікатора?


19

Які мотиви були Java використовувати @Overrideанотацію, а не створювати новий overrideмодифікатор?

@Override
public String toString() {
   return "";
}

vs.

public override String toString() {
   return "";
}

2
Це була думка.
Tulains Córdova

Відповіді:


21

@Override спочатку не був у мові. Коли з'явилася потреба додати її, було легше використовувати загальний механізм (анотації), ніж додати нове ключове слово до мови. Додавання нового ключового слова - це завжди несумісна зміна, оскільки воно може порушити програми, які використовують ці слова як ідентифікатор.

У мовах, які додають маркер переопределення прямо з першого дня, це досить часто ключове слово (приклади "Котлін" і "Скала");


Суперечливим є те, що переосмислення - це примітка, коли відбулися зміни, які ввели нові ключові слова. Наприклад, модифікатор "за замовчуванням" для методів інтерфейсу.
jwa

6
@jwa Насправді: defaultвже не було зарезервованого ключового слова (використовується в операторах переключення) - вони просто додали для нього нове використання. Також є кілька ключових слів, які зараз нічого не роблять, але зарезервовані для подальшого використання (const, goto) - див. JLS §3.9
Michał Kosmulski

3
"приклади" Котлін і Ява "виглядає як помилка друку, ви мали на увазі написати, наприклад, Scala замість Java?
гнат

6
хоча правда, що додавання глобальних ключових слів розбиває речі, воно могло бути додане як контекстне ключове слово, не порушуючи код. можна припустити, що цього не було зроблено, оскільки це мало ускладнить розбір і механізм анотації був досить хорошим
jk.

1
@ MichałKosmulski: Я пам’ятаю, enumщо додане ключове слово порушило б старіший код. Більш ламаючи ключові слова тут: stackoverflow.com/questions/16506411
Алон Guralnek

13

Вам не потрібна анотація @Override, щоб фактично змінити поведінку; Це примітка, оскільки це просто додавання деякого контексту наміру методу для компілятора, а не зміна самого методу.

Без анотації ви, можливо, маєте намір змінити функціональність, але випадково не зробите це (використовуючи трохи інший підпис). Додавання примітки вказує компілятору створити помилку, якщо цей спосіб насправді не переважає.

Як такий, він має ідеальний сенс як анотація.


+1 Має сенс, що подібно до відключення попереджень через анотації, також можна було б включити необов'язкові попередження / помилки за допомогою анотацій.
Халк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.