Почему @interface используется для определения аннотаций? - PullRequest
7 голосов
/ 03 сентября 2011

Я использовал аннотации в Java или какое-то время в качестве конечного пользователя, но недавно я решил заняться созданием своих собственных типов аннотаций и нахожу синтаксис для определения аннотаций в Java с @interface очень странным.Мой вопрос: почему Java использует @interface для определения аннотаций вместо введения нового ключевого слова, как это было для перечислений?Есть ли какое-то преимущество в синтаксисе @interface, которое я пропускаю?

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

@ интерфейс имеет слишком много ограничений, например, вы не можете использовать расширение, есть определенные типы, которые вы не можете использовать при определении элемента аннотации, например Дата.Я считаю, что ограничения на то, что может входить в @interface, неочевидны, и для меня это просто хак.

Ответы [ 3 ]

5 голосов
/ 03 сентября 2011

Я не знаю точных соображений для этого конкретного случая, но в целом:

Введение нового ключевого слова в язык нарушает совместимость всего существующего исходного кода, который использует это конкретное ключевое слово в качестве идентификатора.,

Существующий исходный код не может быть скомпилирован с новой версией компилятора, пока он не будет изменен, чтобы избежать ключевого слова.Это не невозможно преодолеть (как продемонстрировал случай enum), но это неудобно и заставляет многих людей выполнять дополнительную работу.Обычно дизайнеры Java пытались внедрить новые языковые функции, не нарушая совместимость исходного кода.

В случае enum, о котором вы упомянули, я думаю, они решили, что это (а) общее ключевое слово в других C-языки стилей, (b) обычно используются только в качестве идентификатора локальной области действия в существующем коде и, таким образом, легко реорганизуются и (c) без каких-либо разумных альтернатив.Они решили, что выгоды перевешивают затраты.Что касается аннотации, они, очевидно, решили иначе.

Кроме того, вам может быть интересно посмотреть доклад Джоша Блоха об эффективном API-дизайне , который затрагивает многие из этих соображений.

1 голос
/ 03 сентября 2011

Объявления аннотаций, как правило, очень отвратительны.

Они, вероятно, думали, что лишь немногие (эксперты) будут объявлять и обрабатывать аннотации, большинство программистов будут просто использовать аннотации, разработанные экспертами.Поэтому они не слишком много думали, чтобы украсить аннотации.enum предполагается использовать большинством программистов в своей повседневной работе, поэтому синтаксис должен быть кратким.

Но теперь все больше и больше сред, таких как Guice / CDI, требуют / поощряют программистов приложений объявлять свои собственные аннотации,И многие программисты чувствуют себя достаточно смелыми, чтобы разрабатывать и обрабатывать свои собственные аннотации.Проблема запутанного синтаксиса объявлений аннотаций становится все более острой.

0 голосов
/ 03 сентября 2011

Очевидно, что дизайнеры не хотели добавлять ключевое слово. Не то, что вы делаете легкомысленно, поскольку это делает недействительными существующие правильные программы. В комитете Cobol-9x добавлены десятки, если не сотни ключевых слов, и вы должны были услышать крики. Некоторые компании говорили о предъявлении иска органу по стандартизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...