Аннотации в Java: типы, использование и примеры

Опубликовано: 2022-05-19

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

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

Вот некоторые основы аннотаций в Java:

  1. Аннотации всегда начинаются с «@». Например: '@override', '@target', '@SuppressWarnings' и т. д.
  2. Аннотации не влияют на поведение скомпилированной программы.
  3. Аннотации помогают связать метаданные с компонентами программы, такими как методы, классы, переменные и т. д.
  4. Аннотации — это не просто комментарии, поскольку они могут влиять на то, как программа обрабатывается компилятором. Они предлагают компилятору дополнительную информацию о программе, но не являются частью самой программы. Поэтому эти аннотации не влияют на выполнение скомпилированной программы.

Оглавление

Типы аннотаций в Java

1. Аннотации с одним значением

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

@TestAnnotation («тестирование»);

2. Полные аннотации

Полные аннотации состоят из различных данных, таких как элементы данных, значения, пары и имена.

Например:

@TestAnnotation (владелец = «Рахул», значение = «Знатоки класса»)

Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

3. Повторяющиеся аннотации

Когда аннотацию можно применить к отдельным объектам более одного раза, она помечается как повторяющаяся аннотация. Повторяющиеся аннотации указываются с помощью тега @Repeatable, как определено в пакете java.lang.annotation. Его поле значения указывает тип контейнера повторяющейся аннотации.

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

Например:

// Java-программа для демонстрации повторяющейся аннотации

// Импорт необходимых классов

импортировать java.lang.annotation.Annotation;

импортировать java.lang.annotation.Repeatable;

импортировать java.lang.annotation.Retention;

импортировать java.lang.annotation.RetentionPolicy;

импортировать java.lang.reflect.Method;

// Сделать аннотацию Word повторяемой

@Retention(RetentionPolicy.RUNTIME)

@Repeatable(MyRepeatedAnnos.class)

@интерфейсные слова

{

Строковое слово() по умолчанию «Привет»;

целое значение() по умолчанию 0;

}

// Создаем аннотацию контейнера

@Retention(RetentionPolicy.RUNTIME)

@интерфейс MyRepeatedAnnos

{

Слова[] значение();

}

общественный класс Основной {

// Повтор слов в новом методе

@Words(слово = «Первый», значение = 1)

@Words(слово = «Второй», значение = 2)

public static void newMethod()

{

Основной объект = новый Основной();

пытаться {

Класс<?> c = obj.getClass();

// Получаем аннотацию для newMethod

Метод m = c.getMethod («новый метод»);

// Отображаем повторяющуюся аннотацию

Аннотация год

= m.getAnnotation(MyRepeatedAnnos.class);

System.out.println(год);

}

поймать (NoSuchMethodException e) {

Система.out.println(e);

}

}

public static void main(String[] args) { newMethod(); }

}

Конечным результатом будет: @MyRepeatedAnnos(value={@Words(value=1, word="First"), @Words(value=2, word="Second")})

Изучите наши популярные курсы по программной инженерии

Сл. Нет Программы разработки программного обеспечения
1 Магистр компьютерных наук LJMU и IIITB Программа сертификатов кибербезопасности Caltech CTME
2 Учебный курс по полной разработке стека Программа PG в блокчейне
3 Программа Executive Post Graduate Program в области разработки программного обеспечения - специализация в DevOps Просмотреть все курсы по программной инженерии

3. Маркерные аннотации

Аннотации маркеров предназначены только для целей объявления. Эта аннотация также не содержит никаких членов и не содержит никаких данных. Его единственная цель - поддерживать присутствие в качестве аннотации. Например: @Override.

4. Введите аннотации

Эти аннотации можно использовать везде, где используется тип. Например, мы можем аннотировать возвращаемый тип метода. Аннотации типов помечаются аннотацией @Target.

Код, который может иллюстрировать аннотации типов:

// Импорт необходимых классов

импортировать java.lang.annotation.ElementType;

импортировать java.lang.annotation.Target;

// Использование целевой аннотации для аннотации типа

@Target(ElementType.TYPE_USE)

// Объявление аннотации простого типа

@interface TypeAnnoDemo{}

// Основной класс

открытый класс GFG {

// Основной метод драйвера

public static void main(String[] args) {

// Аннотирование типа строки

@TypeAnnoDemo String string = «Этот код снабжен аннотацией типа»;

System.out.println(строка);

азбука();

}

// Аннотирование возвращаемого типа функции

статический @TypeAnnoDemo int abc () {

System.out.println("Тип возвращаемого значения этой функции аннотирован");

вернуть 0;

}

Примеры предопределенных аннотаций

Существует много разновидностей предопределенных аннотаций, о которых мы упоминали ранее. Давайте посмотрим:

1. @Переопределить

Эта аннотация маркера может использоваться только в методах. Любой метод с аннотацией @override должен заменить другой метод из суперкласса. В противном случае возникает ошибка времени компиляции. Это происходит потому, что он должен гарантировать, что суперкласс действительно переопределен, а не просто перегружен.

Код, который может иллюстрировать аннотацию переопределения:

// Класс 1

Базовый класс

{

публичный пустой дисплей ()

{

System.out.println("Базовый дисплей()");

}

public static void main (String args [])

{

База t1 = новый производный();

t1.Дисплей();

}

}

// Класс 2

// Расширение класса выше

Производный класс расширяет базу

{

@Override

публичный пустой дисплей ()

{

System.out.println("Производный дисплей()");

}

}

2. @Цель

Он предназначен только для использования в качестве аннотации к другой аннотации. @Target принимает один параметр, который должен быть константой ElementType. Параметр определяет, к каким объявлениям он может применяться. Аннотация @Target может иметь несколько значений, а не только единственное значение. Однако, если необходимо объявить несколько значений, они должны быть в форме фигурных скобок, например: @Target({ElementType.FIELD, ElementType.LOCAL_VARIABLE}).

Здесь можно использовать аннотацию @Retention, чтобы определить статус хранения аннотации. На аннотацию @Retention влияют три фактора:

  • Источник: компилятор игнорирует аннотации, поскольку они обычно хранятся на уровне исходного кода.
  • Время выполнения: сохраняется во время выполнения.
  • Класс: аннотации остаются во время компиляции и игнорируются программой Java.

3. @Унаследовано

Эта аннотация может использоваться только для целей объявления и, следовательно, влияет только на определенные объявления классов. Одна аннотация может заменить другую и наследовать ее свойства. Таким образом, можно проверить суперкласс, если в подклассе отсутствуют определенные аннотации. Однако, если аннотация присутствует, она получает аннотацию @Inherited.

Например:

// Класс 1

класс DeprecatedTest

{

@Устаревший

публичный пустой дисплей ()

{

System.out.println («Устаревший тестовый дисплей ()»);

}

}

// Класс 2

открытый класс SuppressWarningTest

{

// Если мы прокомментируем ниже аннотацию, программа сгенерирует

// предупреждение

@SuppressWarnings({"проверено", "устарело"})

public static void main (String args [])

{

Устаревший тест d1 = новый Устаревший тест();

d1.Дисплей();

}

}

Вывод

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

Если вы хотите узнать больше о концепциях Java, сертификация upGrad PG в области разработки программного обеспечения , связанная с работой, — ваш лучший выбор, чтобы получить всестороннее понимание языков программирования, таких как Java, HTML, JS, а также других инструментов и библиотек разработки программного обеспечения.

Программа предназначена для студентов последнего курса или безработных выпускников, желающих получить начальные должности в этой области. 5-месячный курс охватывает специализацию в MERN/Cloud-Native и помогает студентам создать первоклассное портфолио, предоставив им 5 практических проектов.

Итак, не ждите. Отправляйтесь на upGrad и забронируйте себе место уже сегодня!

Что такое аннотации @jsonproperty?

Аннотации Jsonproperty позволяют разработчикам сопоставлять ключи JSON с именами свойств во время сериализации и десериализации. На основе настроек Java по умолчанию ключи сопоставляются с полями POJO во время сериализации. Аннотации Json помогают переопределить эту функцию по умолчанию, используя строковые атрибуты, указывающие сопоставленное имя.

Что такое спящие аннотации?

Аннотации Hibernate — это еще один метод указания метаданных при сопоставлении объекта и реляционной таблицы. Это мощный и относительно новый метод сопоставления, который можно использовать вместо метаданных сопоставления XML. Используя аннотации гибернации, пользователи могут хранить метаданные в одном java-файле POJO, который также содержит код, тем самым помогая лучше понять структуру таблицы.

Что такое @SuppressWarnings?

Аннотация @SuppressWarnings уведомляет компилятор об подавленных предупреждениях. Уведомления представлены в виде строки по имени. Он может быть предоставлен для любого вида декларации. Java классифицирует предупреждения на два класса, а именно непроверенные и устаревшие. Когда старый код взаимодействует с кодом на основе дженериков, выдается непроверенное предупреждение.