Рубрики

Аннотации на Java

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

  • Аннотации начинаются с « @ ».
  • Аннотации не изменяют действие скомпилированной программы.
  • Аннотации помогают связать метаданные (информацию) с элементами программы, то есть переменными экземпляра, конструкторами, методами, классами и т. Д.
  • Аннотации не являются чистыми комментариями, так как они могут изменить способ обработки программы компилятором. Посмотрите код ниже для примера.

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

       не только комментарии (эта программа выдает компилятор

       ошибка, потому что мы упомянули переопределение, но не

       переопределено, мы перегружены отображением) * /

    class Base

    {

         public void display()

         {

             System.out.println("Base display()");

         }

    }

    class Derived extends Base

    {

         @Override

         public void display(int x)

         {

             System.out.println("Derived display(int )");

         }

      

         public static void main(String args[])

         {

             Derived obj = new Derived();

             obj.display();

         }

    }

    Выход :

    10: error: method does not override or implement
        a method from a supertype

    Если мы удаляем параметр (int x) или удаляем @override, программа компилируется нормально.

Категории аннотаций

Есть 3 категории аннотаций: —
1. Маркерные аннотации:
Единственная цель — пометить декларацию. Эти аннотации не содержат членов и не содержат никаких данных. Таким образом, его присутствие в качестве аннотации достаточно. Поскольку интерфейс маркера не содержит членов, достаточно просто определить, присутствует он или отсутствует. @Override является примером аннотации маркера.

Example: - @TestAnnotation()

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

Example: - @TestAnnotation(“testing”);

3. Полные аннотации:
Эти аннотации состоят из нескольких элементов данных / имя, значение, пары.

Example:- @TestAnnotation(owner=”Rahul”, value=”Class Geeks”)

Предопределенные / Стандартные Аннотации

Java определяет семь встроенных аннотаций.

  • Четыре импортированы из java.lang.annotation: @Retention , @Documented , @Target и @Inherited .
  • Три из них включены в java.lang: @Deprecated, @Override и @SuppressWarnings

@ Устаревшая аннотация

  • Это маркерная аннотация. Это указывает на то, что объявление устарело и было заменено более новой формой.
  • Тег Javadoc @deprecated следует использовать, когда элемент объявлен устаревшим.
  • Тег @deprecated предназначен для документации, а аннотация @Deprecated — для отражения во время выполнения.
  • Тег @deprecated имеет более высокий приоритет, чем аннотация @Deprecated, когда оба используются вместе.

public class DeprecatedTest

{

    @Deprecated

    public void Display()

    {

        System.out.println("Deprecatedtest display()");

    }

  

    public static void main(String args[])

    {

        DeprecatedTest d1 = new DeprecatedTest();

        d1.Display();

    }

}

Выход:

 Устаревшее тестирование () 

@ Override Аннотации
Это маркерная аннотация, которую можно использовать только для методов. Метод, аннотированный @Override, должен переопределить метод из суперкласса. Если этого не произойдет, возникнет ошибка времени компиляции (см. Это, например). Он используется для гарантии того, что метод суперкласса действительно переопределен, а не просто перегружен.

Пример:-

class Base

{

     public void Display()

     {

         System.out.println("Base display()");

     }

       

     public static void main(String args[])

     {

         Base t1 = new Derived();

         t1.Display();

     }     

}

class Derived extends Base

{

     @Override

     public void Display()

     {

         System.out.println("Derived display()");

     }

}

Выход:

 Производное отображение () 

@SuppressWarnings
Он используется для информирования компилятора о подавлении указанных предупреждений компилятора. Предупреждения для подавления указываются по имени в виде строки. Этот тип аннотации может применяться к любому типу объявления.

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

class DeprecatedTest

{

    @Deprecated

    public void Display()

    {

        System.out.println("Deprecatedtest display()");

    }

}

  

public class SuppressWarningTest

{

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

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

    @SuppressWarnings({"checked", "deprecation"})

    public static void main(String args[])

    {

        DeprecatedTest d1 = new DeprecatedTest();

        d1.Display();

    }

}

Выход:

 Устаревшее тестирование () 

@ Документальные аннотации
Это интерфейс маркера, который сообщает инструменту, что аннотация должна быть задокументирована. Аннотации не включены в комментарии Javadoc. Использование аннотации @Documented в коде позволяет таким инструментам, как Javadoc, обрабатывать ее и включать информацию о типе аннотации в сгенерированный документ.

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

Target ConstantAnnotations Can be Applied To
ANNOTATION_TYPEAnother annotation
CONSTRUCTORConstructor
FIELDField
LOCAL_VARIABLELocal variable
METHODMethod
PACKAGEPackage
PARAMETERParameter
TYPEClass, Interface, or enumeration

Мы можем указать одно или несколько из этих значений в аннотации @Target . Чтобы указать несколько значений, мы должны указать их в списке, разделенном скобками. Например, чтобы указать, что аннотация применяется только к полям и локальным переменным, вы можете использовать эту аннотацию @Target: @Target ({ElementType.FIELD, ElementType.LOCAL_VARIABLE}) @Retention Annotation Определяет, где и как долго аннотация сохраняется. 3 значения, которые может иметь аннотация @Retention:

  • ИСТОЧНИК: Аннотации будут сохраняться на уровне исходного кода и игнорироваться компилятором.
  • КЛАСС: Аннотации будут сохраняться во время компиляции и игнорироваться JVM.
  • RUNTIME: они будут сохранены во время выполнения.

@Inherited
@Inherited — это аннотация маркера, которую можно использовать только при объявлении аннотации. Он влияет только на аннотации, которые будут использоваться в объявлениях классов. @Inherited заставляет аннотацию для суперкласса наследоваться подклассом. Поэтому, когда к подклассу делается запрос конкретной аннотации, если эта аннотация отсутствует в подклассе, то проверяется его суперкласс. Если эта аннотация присутствует в суперклассе, и если она аннотирована с помощью @Inherited, эта аннотация будет возвращена.

Пользовательские / Пользовательские Аннотации

Пользовательские аннотации могут использоваться для аннотирования элементов программы, то есть переменных, конструкторов, методов и т. Д. Эти аннотации могут применяться непосредственно перед объявлением элемента (конструктор, метод, классы и т. Д.).

Синтаксис декларации: —

[Access Specifier] @interface<AnnotationName>
{         
   DataType <Method Name>() [default value];
}
  • AnnotationName является идентификатором.
  • Параметр не должен быть связан с объявлениями метода, а предложение throws не должно использоваться с объявлением метода.
  • Параметры не будут иметь нулевого значения, но могут иметь значение по умолчанию.
  • значение по умолчанию не является обязательным.
  • Возвращаемый тип метода должен быть примитивом, перечислением, строкой, именем класса или массивом типа примитива, перечисления, строки или класса.

package source;

// Java-программа для демонстрации пользовательских аннотаций

import java.lang.annotation.Documented;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

  
// пользовательская аннотация
@Documented

@Retention(RetentionPolicy.RUNTIME)

@ interface TestAnnotation

{

    String Developer() default "Rahul"

    String Expirydate();

} // будет сохранен во время выполнения

  
// Класс драйвера, который использует @TestAnnotation

public class Test

{

    @TestAnnotation(Developer="Rahul", Expirydate="01-10-2020")

    void fun1()

    {

        System.out.println("Test method 1");

    }

  

    @TestAnnotation(Developer="Anil", Expirydate="01-10-2021")

    void fun2()

    {

        System.out.println("Test method 2");

    }

      

    public static void main(String args[])

    {

        System.out.println("Hello");

    }

}

Выход :

Hello

Эта статья предоставлена Рахул Агравал. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Аннотации на Java

0.00 (0%) 0 votes