Јава Анотација је ознака која представља метаподаци тј. приложен са класом, интерфејсом, методама или пољима да би се назначиле неке додатне информације које могу користити јава компајлер и ЈВМ.
Напомене у Јави се користе за пружање додатних информација, тако да је то алтернативна опција за КСМЛ и Јава интерфејсе маркера.
Прво ћемо научити неке уграђене напомене, а затим ћемо прећи на креирање и коришћење прилагођених напомена.
Уграђене Јава напомене
Постоји неколико уграђених напомена у Јави. Неке напомене се примењују на Јава код, а неке на друге напомене.
Уграђене Јава напомене које се користе у Јава коду
- @Прегазити
- @СуппрессВарнингс
- @Застарела
Уграђене Јава напомене које се користе у другим напоменама
- @Таргет
- @Ретентион
- @Наслеђено
- @Документовано
Разумевање уграђених напомена
Хајде да прво разумемо уграђене напомене.
@Прегазити
@Оверриде анотација осигурава да метод поткласе надјачава метод родитељске класе. Ако није тако, јавља се грешка у времену компајлирања.
Понекад правимо глупе грешке као што су правописне грешке итд. Дакле, боље је означити @Оверриде напомену која пружа сигурност да је метод надјачан.
сортирање низа у Јави
class Animal{ void eatSomething(){System.out.println('eating something');} } class Dog extends Animal{ @Override void eatsomething(){System.out.println('eating foods');}//should be eatSomething } class TestAnnotation1{ public static void main(String args[]){ Animal a=new Dog(); a.eatSomething(); }}Тестирајте одмах
Output:Comple Time Error
@СуппрессВарнингс
@СуппрессВарнингс анотација: користи се за сузбијање упозорења која је издао компајлер.
import java.util.*; class TestAnnotation2{ @SuppressWarnings('unchecked') public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('sonoo'); list.add('vimal'); list.add('ratan'); for(Object obj:list) System.out.println(obj); }}Тестирајте одмах
Now no warning at compile time.
Ако уклоните напомену @СуппрессВарнингс('унцхецкед'), она ће приказати упозорење у време компајлирања јер користимо негенеричку колекцију.
@Застарела
@Депрецатед напомена означава да је овај метод застарео тако да компајлер штампа упозорење. Обавештава корисника да се може уклонити у будућим верзијама. Дакле, боље је не користити такве методе.
пандин стожер
class A{ void m(){System.out.println('hello m');} @Deprecated void n(){System.out.println('hello n');} } class TestAnnotation3{ public static void main(String args[]){ A a=new A(); a.n(); }}Тестирајте одмах
У време компајлирања:
Note: Test.java uses or overrides a deprecated API. <br> Note: Recompile with -Xlint:deprecation for details.
У току рада:
hello n
Јава прилагођене напомене
Јава прилагођене напомене или Јава Кориснички дефинисане напомене се лако креирају и користе. Тхе @интерфејс елемент се користи за декларисање напомене. На пример:
@interface MyAnnotation{}
Овде је МиАннотатион назив прилагођене напомене.
Тачке које треба запамтити за потпис прилагођене јава напомене
Постоји неколико тачака које програмер треба да запамти.
- Метода не би требало да има клаузуле бацања
- Метод треба да врати једно од следећег: примитивни типови података, стринг, класа, енум или низ ових типова података.
- Метода не би требало да има ниједан параметар.
- Требало би да приложимо @ непосредно испред кључне речи интерфејса да бисмо дефинисали напомену.
- Може да додели подразумевану вредност методу.
Врсте напомена
Постоје три врсте напомена.
- Маркер Аннотатион
- Напомена са једном вредношћу
- Напомена са више вредности
1) Ознака маркера
Белешка која нема метод, назива се белешка маркера. На пример:
@interface MyAnnotation{}
@Оверриде и @Депрецатед су ознаке маркера.
2) Напомена са једном вредношћу
Анотација која има један метод назива се анотација са једном вредношћу. На пример:
д флип флоп
@interface MyAnnotation{ int value(); }
Можемо да обезбедимо и подразумевану вредност. На пример:
@interface MyAnnotation{ int value() default 0; }
Како да примените напомену са једном вредношћу
Хајде да видимо код за примену напомене једне вредности.
@MyAnnotation(value=10)
Вредност може бити било која.
3) Напомене са више вредности
Белешка која има више од једног метода назива се напомена са више вредности. На пример:
@interface MyAnnotation{ int value1(); String value2(); String value3(); } }
Можемо да обезбедимо и подразумевану вредност. На пример:
додавање у низ јава
@interface MyAnnotation{ int value1() default 1; String value2() default ''; String value3() default 'xyz'; }
Како да примените напомену са више вредности
Хајде да видимо код за примену напомене са више вредности.
@MyAnnotation(value1=10,value2='Arun Kumar',value3='Ghaziabad')
Уграђене напомене које се користе у прилагођеним напоменама у Јави
- @Таргет
- @Ретентион
- @Наслеђено
- @Документовано
@Таргет
@Таргет таг се користи за одређивање типа напомене.
Тхе јава.ланг.аннотатион. ЕлементТипе енум декларише многе константе да би одредио тип елемента на који ће се применити напомена, као што су ТИПЕ, МЕТХОД, ФИЕЛД итд. Хајде да видимо константе ЕлементТипе енум:
Типови елемената | Где се може применити напомена |
---|---|
ТИП | класа, интерфејс или набрајање |
ФИЕЛД | поља |
МЕТОДА | методе |
ЦОНСТРУЦТОР | конструктори |
ЛОЦАЛ_ВАРИАБЛЕ | локалне варијабле |
АННОТАТИОН_ТИПЕ | врста напомене |
ПАРАМЕТЕР | параметар |
Пример за одређивање напомене за класу
@Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); }
Пример за навођење напомене за класу, методе или поља
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) @interface MyAnnotation{ int value1(); String value2(); }
@Ретентион
@Ретентион анотација се користи за одређивање до ког нивоа ће анотација бити доступна.
РетентионПолици | Доступност |
---|---|
РетентионПолици.СОУРЦЕ | односи се на изворни код, одбачен током компилације. Неће бити доступан у преведеној класи. |
РетентионПолици.ЦЛАСС | односи се на .цласс датотеку, доступну јава компајлеру, али не и ЈВМ-у. Укључен је у датотеку класе. |
РетентионПолици.РУНТИМЕ | односи се на време извођења, доступно јава компајлеру и ЈВМ-у. |
Пример за навођење РетентионПолици
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); }
Пример прилагођене напомене: креирање, примена и приступ напомени
Погледајмо једноставан пример креирања, примене и приступа напоменама.
Фајл: Тест.јава
//Creating annotation import java.lang.annotation.*; import java.lang.reflect.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @interface MyAnnotation{ int value(); } //Applying annotation class Hello{ @MyAnnotation(value=10) public void sayHello(){System.out.println('hello annotation');} } //Accessing annotation class TestCustomAnnotation1{ public static void main(String args[])throws Exception{ Hello h=new Hello(); Method m=h.getClass().getMethod('sayHello'); MyAnnotation manno=m.getAnnotation(MyAnnotation.class); System.out.println('value is: '+manno.value()); }}Тестирајте одмах
Output:value is: 10
преузмите овај пример
Како се уграђене напомене користе у стварном сценарију?
У стварном сценарију, јава програмер треба само да примени напомену. Он/она не треба да креира белешке и да им приступа. Креирање и приступ напоменама врши провајдер имплементације. У име напомене, јава компајлер или ЈВМ обавља неке додатне операције.
@Наслеђено
Подразумевано, напомене се не наслеђују у подкласе. Белешка @Инхеритед означава белешку која ће се наследити од подкласа.
@Inherited @interface ForEveryone { }//Now it will be available to subclass also @interface ForEveryone { } class Superclass{} class Subclass extends Superclass{}
@Документовано
@Доцументед Означава напомену за укључивање у документацију.