Вопрос

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

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

Являются ли они уникальными для Java?Существует ли эквивалент C ++?

Это было полезно?

Решение

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

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

Другие советы

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

Нет, но в VB и C # есть атрибуты что является одним и тем же.

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

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

/РЕДАКТИРОВАТЬ:Атрибуты в классах сравнимы с интерфейсами тегов (например Сериализуемый на Java).Однако в .Руководстве по сетевому кодированию говорится, что не следует использовать интерфейсы тегов.Кроме того, они работают только на уровне класса, а не на уровне метода.

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

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

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

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

Здесь это введение.

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

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

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

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

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

Аннотации, когда дело доходит до 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
}

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

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

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

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

  • RetentionPolicy.SOURCE:Аннотация должна быть доступна в исходном коде программы и может быть использована компилятором или подходящий для генерации кода.
  • RetentionPolicy.CLASS:Аннотация будет находиться в файле .class, но она не будет доступна во время выполнения.Используется инструментами манипулирования байт-кодом, такими как ASM выполните изменения
  • RetentionPolicy.RUNTIME:Аннотация была бы доступна в файле .class и во время выполнения для проверки с помощью отражения java через getAnnotations().
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top