Какова цель аннотаций в Java? У меня нечеткое представление о них как о чем-то среднее между комментарием и реальным кодом. Влияют ли они на программу во время выполнения?
Каковы их типичные обычаи?
Являются ли они уникальными для Java? Есть ли эквивалент на C ++?
java
annotations
glossary
Lehane
источник
источник
Ответы:
Аннотации в основном используются кодом, который проверяет другой код. Они часто используются для модификации (т. Е. Украшения или упаковки) существующих классов во время выполнения, чтобы изменить их поведение. Такие фреймворки, как JUnit и Hibernate, используют аннотации, чтобы минимизировать объем кода, который вам нужно написать самостоятельно для использования фреймворков.
У Oracle есть хорошее объяснение концепции и ее значения на Java на своем сайте.
источник
Нет, но VB и C # имеют одинаковые атрибуты .
Их использование довольно разнообразно. Один типичный пример Java
@Override
не влияет на код, но может использоваться компилятором для генерации предупреждения (или ошибки), если декорированный метод фактически не отменяет другой метод. Аналогичным образом методы можно пометить как устаревшие.Тогда есть отражение. Когда вы отражаете тип класса в своем коде, вы можете получить доступ к атрибутам и действовать в соответствии с найденной там информацией. Я не знаю примеров на Java, но в .NET это используется компилятором для генерации (де) сериализации информации для классов, определения структуры памяти структур и объявления импорта функций из устаревших библиотек (среди прочего). Они также контролируют работу конструктора форм IDE.
/ EDIT: атрибуты классов сопоставимы с интерфейсами тегов (например, Serializable в Java). Однако в рекомендациях по кодированию .NET говорится, что интерфейсы тегов не используются. Кроме того, они работают только на уровне класса, а не на уровне метода.
источник
Андерс дает хорошее резюме, и вот пример аннотации JUnit
Здесь
@Test
аннотация сообщает JUnit, чтоflatfileMissing
метод является тестом, который должен быть выполнен, и что ожидаемый результат - это брошенныйIOException
. Таким образом, когда вы запускаете свои тесты, этот метод будет вызываться, и тест будет пройден или не пройден в зависимости от того, был ли запущенIOException
.источник
В Java также есть инструмент обработки аннотаций (apt), в котором вы не только создаете аннотации, но и решаете, как эти аннотации работают с исходным кодом.
Вот введение.
источник
Чтобы увидеть некоторые интересные вещи, которые вы можете делать с помощью аннотаций, ознакомьтесь с моими аннотациями JavaBean и обработчиком аннотаций .
Они отлично подходят для генерации кода, добавления дополнительных проверок во время сборки, и я также использовал их для инфраструктуры сообщений об ошибках (еще не опубликованных - нужно очистить с боссами ...).
источник
По буквальному определению аннотация добавляет примечания к элементу. Аналогичным образом, аннотации Java - это теги, которые мы вставляем в исходный код для предоставления дополнительной информации о коде. Аннотации Java связывают информацию с аннотированным элементом программы. Помимо аннотаций Java, программы Java содержат большое количество неофициальной документации, которая обычно содержится в комментариях в файле исходного кода. Но аннотации Java отличаются от комментариев, они аннотируют элементы программы напрямую, используя типы аннотаций для описания формы аннотаций. Аннотации Java представляют информацию стандартным и структурированным образом, чтобы ее можно было легко использовать с помощью инструментов обработки.
Чтобы прочитать подробности, есть хороший учебник по Java Annotations.
источник
Когда вы используете аннотацию Java @Override и почему? Ссылка относится к вопросу о том, когда следует использовать аннотацию переопределения (@override). Это может помочь лучше понять концепцию аннотации.
источник
Аннотации, когда дело доходит до EJB, известны как выбор неявного подхода промежуточного программного обеспечения над явным подходом промежуточного программного обеспечения, когда вы используете аннотацию, вы настраиваете то, что вам именно нужно из API, например, вам нужно вызвать метод транзакции для банковского перевода : без аннотации: код будет
при использовании аннотации ваш код не содержит громоздких вызовов API для использования промежуточных сервисов. Код чистый и ориентирован на бизнес-логику
источник