Java аннотаций

голоса
105

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

Каковы их характерные обычаи?

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

Задан 23/08/2008 в 14:23
источник пользователем
На других языках...                            


9 ответов

голоса
75

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

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

Ответил 23/08/2008 d 14:38
источник пользователем

голоса
16

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

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

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

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

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

Ответил 23/08/2008 d 14:31
источник пользователем

голоса
12

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

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

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

Ответил 23/08/2008 d 17:16
источник пользователем

голоса
7

Java также имеет Annotation Processing Tool (APT), где не только создавать аннотации, но решить также, как сделать эти аннотации работают на исходном коде.

Вот это введение.

Ответил 25/08/2008 d 18:02
источник пользователем

голоса
4

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

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

Ответил 16/09/2008 d 16:29
источник пользователем

голоса
0

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

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

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

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

  • RetentionPolicy.SOURCE: Аннотация будет доступна в исходном коде программы и может использоваться компилятором или склонным для генерации коды.
  • RetentionPolicy.CLASS: В аннотации было бы в файле .class, но он не будет доступен во время выполнения. Используется манипуляционных байт кода инструментов, таких как ASM выполнения модификаций
  • RetentionPolicy.RUNTIME: В аннотации будет доступна в .class файл и время выполнения для проверки с помощью Java Reflection через getAnnotations ().
Ответил 03/04/2018 d 14:05
источник пользователем

голоса
0

Аннотации, когда дело доходит до 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
}
Ответил 21/01/2016 d 15:21
источник пользователем

голоса
0

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

Ответил 08/04/2014 d 11:32
источник пользователем

голоса
0

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

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

Ответил 30/11/2013 d 08:55
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more