Java аннотации - PullRequest
       47

Java аннотации

110 голосов
/ 23 августа 2008

Для чего нужны аннотации в Java? У меня есть эта нечеткая идея о них как где-то между комментарием и реальным кодом. Они влияют на программу во время выполнения?

Каковы их типичные способы использования?

Они уникальны для Java? Есть ли эквивалент C ++?

Ответы [ 9 ]

78 голосов
/ 23 августа 2008

Аннотации в основном используются кодом, который проверяет другой код. Они часто используются для изменения (т.е. декорирования или упаковки) существующих классов во время выполнения, чтобы изменить их поведение. Фреймворки, такие как JUnit и Hibernate , используют аннотации, чтобы минимизировать объем кода, который вам нужно написать для использования каркасов.

Oracle имеет хорошее объяснение концепции и ее значения в Java на своем сайте.

16 голосов
/ 23 августа 2008

Кроме того, они уникальны для Java, есть ли эквивалент C ++?

Нет, но VB и C # имеют атрибуты , которые одно и то же.

Их использование довольно разнообразно. Один типичный пример Java, @Override не влияет на код, но может использоваться компилятором для генерации предупреждения (или ошибки), если декорированный метод фактически не перекрывает другой метод. Точно так же методы могут быть помечены как устаревшие.

Тогда есть отражение. Когда вы отражаете тип класса в своем коде, вы можете получить доступ к атрибутам и действовать в соответствии с информацией, найденной там. Я не знаю примеров в Java, но в .NET это используется компилятором для генерации (де) сериализации информации для классов, определения структуры памяти структур и объявить импорт функций из устаревших библиотек (среди прочих). Они также контролируют работу дизайнера форм IDE.

/ EDIT: атрибуты классов сопоставимы с интерфейсами тегов (например, Serializable в Java). Однако в руководствах по кодированию .NET говорится, что не следует использовать интерфейсы тегов. Кроме того, они работают только на уровне класса, а не на уровне метода.

13 голосов
/ 23 августа 2008

Андерс дает хорошее резюме, а вот пример аннотации JUnit

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

Здесь аннотация @Test сообщает JUnit, что метод flatfileMissing - это тест, который должен быть выполнен, и что ожидаемый результат - выброшенный IOException. Таким образом, когда вы запускаете свои тесты, этот метод будет вызван, и тест будет пройден или не пройден в зависимости от того, выброшен IOException.

7 голосов
/ 25 августа 2008

Java также имеет инструмент обработки аннотаций (apt), где вы не только создаете аннотации, но и решаете, как эти аннотации работают с исходным кодом.

Здесь представляет собой введение.

4 голосов
/ 16 сентября 2008

Чтобы увидеть некоторые интересные вещи, которые вы можете сделать с аннотациями, посмотрите мой процессор аннотаций и аннотаций JavaBean .

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

0 голосов
/ 03 апреля 2018

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

Аннотации имеют ряд применений, среди них:

  • Информация для компилятора - Компилятор может использовать аннотации для обнаружения ошибок или подавления предупреждений.
  • Обработка во время компиляции и во время развертывания - Программные средства могут обрабатывать информацию аннотаций для генерации кода, файлов XML и т. Д.
  • Обработка во время выполнения - Некоторые аннотации доступны для изучения во время выполнения.

Область видимости определяется java.lang.annotation.RetentionPolicy константами SOURCE, CLASS и RUNTIME

  • RetentionPolicy.SOURCE: аннотация будет доступна в исходном коде программы и может использоваться компилятором или apt для генерации кода.
  • RetentionPolicy.CLASS: аннотация будет в файле .class, но она не будет доступна во время выполнения. Используемые инструменты манипулирования байтовым кодом, такие как ASM , выполняют модификации
  • RetentionPolicy.RUNTIME: аннотация будет доступна в файле .class и во время выполнения для проверки с помощью java-отражения через getAnnotations ().
0 голосов
/ 21 января 2016

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

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

при использовании аннотации ваш код не содержит громоздких вызовов API для использования среднего сервисные услуги. Код чистый и ориентирован на бизнес-логику

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}
0 голосов
/ 08 апреля 2014

Когда вы используете аннотацию @Override в Java и почему? Ссылка относится к вопросу о том, когда следует использовать аннотацию переопределения (@override). Это может помочь лучше понять концепцию аннотации. Проверьте.

0 голосов
/ 30 ноября 2013

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

Чтобы прочитать подробно, есть хороший учебник по Java-аннотации

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