Подтвердить что ты не робот

Что вы можете сделать и не делать с аннотациями java?

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

4b9b3361

Ответ 1

Мы используем аннотацию времени выполнения вместе с отражением для настройки нашего сопоставления модели домена в базу данных. Также наша проверка формы основана на аннотации в коде, используемом во время выполнения.

Кроме того, вы можете использовать Обработчик аннотации, который поставляется с Java для предварительной обработки исходных файлов.

EDIT: и lombok, как задано в Вопросе, был добавлен новый более мощный способ использования этой обработки аннотации, чем в основном все здесь считались возможными. Позвольте мне описать это для вас в нескольких словах: они перехватывают шаг обработки аннотации Java в

  • Java-компилятор и
  • Eclipse IDE, где генерируется дерево разбора для вашего кода.

Таким образом, затмение показывает вам больше кода, который вы действительно написали, и javac полагает то же самое. Технология генератора использует обработку Java Annoation старого стиля, но вы можете думать о Ломбоке как о недостающем клее, который нужен всем, чтобы сделать его действительно полезным.

Ответ 2

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

Отражение известно как нечто чрезвычайно мощное, но в то же время это может быть опасно.

Я думаю, что основной вопрос заключается в следующем: "Какое законное использование аннотаций или, в более общем плане, отражение?".

Поскольку между отражением и безопасностью существует разрывы (система типов разломов, доступ к конечным полям и т.д.), есть два лагеря: те, кто обнимают мета-программирование, и те, кто обнимают безопасность. Что законно, в конечном счете, зависит от вкуса и мнения.

Похожие вопросы:


На основе вашего комментария кажется, что вы в основном интересуетесь JSR-269 и подключаетесь к процессу компиляции. Я вижу два варианта использования JSR-269: для выборочных проверок ошибок/семантики (например, переопределение) для разработки DSL/языка. Я не знаю, широко ли он используется для взлома и эксперимента. Вот, тем не менее, интересные ссылки от коллеги:

Тем не менее, я бы сказал, что преобразование байтового кода/компиляторы все еще принадлежит метапрограммированию. Например, вы можете генерировать getter/setter, как в Lombok во время компиляции, или использовать динамический прокси-сервер, который делает это во время выполнения. Поэтому для меня эта двойственность означает, что мы все еще находимся в области рефлексии.

Ответ 3

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

Но кроме этого, вот некоторые из реальных ограничений аннотаций в моем опыте:

  • Они статичны. Это означает, что вы не можете изменить динамическую конфигурацию выполнения. Поэтому, если у вас есть информация о базе данных, полученная из аннотации, это может быть очень ограниченным. Рамочные программы, которые обычно работают, нуждаются как в механизмах настройки, так и в аннотациях, а также в некоторых XML или других динамических механизмах. Не совсем замечательно.
  • В связи с номером 1 их трудно проверить. Представьте себе структуру, которая должна обрабатывать некоторые аннотации. Создание всех вариантов тестирования - это много плиты котла.
  • Их трудно употреблять. Как отражение, так и просто общие трудности делают его настолько, что они подходят для структуры, чтобы попросить своих пользователей написать аннотацию, но вы никогда не захотите, чтобы пользователь фреймворка должен анализировать аннотации параметра, чтобы определить что-либо.

Ответ 4

Аннотации - это метаданные, информация об информации - в этом случае ваш код.

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

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

Извините меня, возможно, за упрощение.

Ответ 5

Этот вопрос очень (слишком?) широкий, поэтому я просто приведу один пример, который мне интересен. JPA 2.0 опирается на обработку аннотаций для генерации статических метамодельных классов для сущностей (используется для запросов безопасного типа с API-интерфейсом Criteria).

См. также