logo

Java-anmærkninger

Java Anmærkning er et tag, der repræsenterer metadata dvs. vedhæftet med klasse, interface, metoder eller felter for at angive nogle yderligere oplysninger, som kan bruges af java-kompiler og JVM.

Annoteringer i Java bruges til at give yderligere information, så det er en alternativ mulighed for XML- og Java-markørgrænseflader.

Først vil vi lære nogle indbyggede annoteringer, derefter vil vi fortsætte med at oprette og bruge brugerdefinerede annoteringer.


Indbyggede Java-anmærkninger

Der er flere indbyggede annoteringer i Java. Nogle anmærkninger anvendes på Java-kode og nogle på andre anmærkninger.

Indbyggede Java-anmærkninger brugt i Java-kode

  • @Tilsidesæt
  • @SuppressWarnings
  • @Forældet

Indbyggede Java-annoteringer, der bruges i andre annoteringer

  • @Mål
  • @Tilbageholdelse
  • @Arvet
  • @Dokumenteret

Forstå indbyggede anmærkninger

Lad os først forstå de indbyggede annoteringer.

@Tilsidesæt

@Override annotation sikrer, at underklassemetoden tilsidesætter den overordnede klassemetode. Hvis det ikke er tilfældet, opstår der en kompileringstidsfejl.

Nogle gange laver vi de dumme fejl, såsom stavefejl osv. Så det er bedre at markere @Override annotation, der giver sikkerhed for, at metoden er tilsidesat.

indsættelsessortering i java
 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(); }} 
Test det nu
 Output:Comple Time Error 

@SuppressWarnings

@SuppressWarnings annotation: bruges til at undertrykke advarsler udstedt af compileren.

 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); }} 
Test det nu
 Now no warning at compile time. 

Hvis du fjerner @SuppressWarnings('unchecked') annotationen, vil den vise en advarsel på kompileringstidspunktet, fordi vi bruger ikke-generisk samling.


@Forældet

@Forældet anmærkning markerer, at denne metode er forældet, så compileren udskriver en advarsel. Det informerer brugeren om, at det kan blive fjernet i fremtidige versioner. Så det er bedre ikke at bruge sådanne metoder.

java sammenligning
 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(); }} 
Test det nu

På kompileringstidspunktet:

 Note: Test.java uses or overrides a deprecated API. <br> Note: Recompile with -Xlint:deprecation for details. 

Ved kørsel:

 hello n 

Java brugerdefinerede anmærkninger

Java brugerdefinerede annoteringer eller Java Brugerdefinerede anmærkninger er nemme at oprette og bruge. Det @grænseflade element bruges til at erklære en annotering. For eksempel:

 @interface MyAnnotation{} 

Her er MyAnnotation det brugerdefinerede annotationsnavn.

Punkter at huske på for java brugerdefinerede annotationssignatur

Der er få punkter, der bør huskes af programmøren.

  1. Metoden bør ikke have nogen kast-klausuler
  2. Metoden skal returnere en af ​​følgende: primitive datatyper, streng, klasse, enum eller matrix af disse datatyper.
  3. Metoden bør ikke have nogen parameter.
  4. Vi bør vedhæfte @ lige før grænsefladenøgleord for at definere annotering.
  5. Det kan tildele en standardværdi til metoden.

Typer af anmærkninger

Der er tre typer anmærkninger.

  1. Markør annotation
  2. Enkeltværdianmærkning
  3. Anmærkning med flere værdier
Java-anmærkningstyper

1) Markør Annotation

En annotering, der ikke har nogen metode, kaldes markørannotering. For eksempel:

 @interface MyAnnotation{} 

@Override og @Deprecated er markørannoteringer.


2) Enkeltværdianmærkning

En annotering, der har én metode, kaldes enkeltværdiannotering. For eksempel:

runtime fejl
 @interface MyAnnotation{ int value(); } 

Vi kan også angive standardværdien. For eksempel:

 @interface MyAnnotation{ int value() default 0; } 

Sådan anvender du enkeltværdianmærkning

Lad os se koden for at anvende enkeltværdiannoteringen.

 @MyAnnotation(value=10) 

Værdien kan være hvad som helst.


3) Anmærkning med flere værdier

En annotering, der har mere end én metode, kaldes Multi-Value annotation. For eksempel:

 @interface MyAnnotation{ int value1(); String value2(); String value3(); } } 

Vi kan også angive standardværdien. For eksempel:

konvertere en streng til heltal
 @interface MyAnnotation{ int value1() default 1; String value2() default &apos;&apos;; String value3() default &apos;xyz&apos;; } 

Sådan anvender du Multi-Value Annotation

Lad os se koden til at anvende flerværdiannoteringen.

 @MyAnnotation(value1=10,value2=&apos;Arun Kumar&apos;,value3=&apos;Ghaziabad&apos;) 

Indbyggede annoteringer, der bruges i brugerdefinerede annoteringer i java

  • @Mål
  • @Tilbageholdelse
  • @Arvet
  • @Dokumenteret

@Mål

@Mål tag bruges til at angive, hvilken type annoteringen bruges.

Java.lang.annotationen. ElementType enum erklærer mange konstanter for at specificere den type element, hvor annotering skal anvendes, såsom TYPE, METHOD, FELT osv. Lad os se konstanterne for ElementType enum:

ElementtyperHvor annotationen kan anvendes
TYPEklasse, grænseflade eller opregning
MARKfelter
METODEmetoder
KONSTRUKTØRkonstruktører
LOCAL_VARIABLElokale variabler
ANNOTATION_TYPEanmærkningstype
PARAMETERparameter

Eksempel til at specificere annotering for en klasse

 @Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); } 

Eksempel til at specificere annotering for en klasse, metoder eller felter

 @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) @interface MyAnnotation{ int value1(); String value2(); } 

@Tilbageholdelse

@Tilbageholdelse annotation bruges til at specificere til hvilket niveau annotering vil være tilgængelig.

OpbevaringspolitikTilgængelighed
RetentionPolicy.SOURCEhenviser til kildekoden, kasseret under kompilering. Det vil ikke være tilgængeligt i den kompilerede klasse.
RetentionPolicy.CLASShenviser til .class-filen, tilgængelig for java-kompileren, men ikke til JVM. Det er inkluderet i klassefilen.
RetentionPolicy.RUNTIMErefererer til runtime, tilgængelig for java compiler og JVM.

Eksempel for at specificere RetentionPolicy

 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); } 

Eksempel på tilpasset annotering: oprettelse, anvendelse og adgang til annotering

Lad os se det enkle eksempel på oprettelse, anvendelse og adgang til annotering.

Fil: Test.java

 //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(&apos;hello annotation&apos;);} } //Accessing annotation class TestCustomAnnotation1{ public static void main(String args[])throws Exception{ Hello h=new Hello(); Method m=h.getClass().getMethod(&apos;sayHello&apos;); MyAnnotation manno=m.getAnnotation(MyAnnotation.class); System.out.println(&apos;value is: &apos;+manno.value()); }} 
Test det nu
 Output:value is: 10 

download dette eksempel

Hvordan bruges indbyggede annotationer i virkelige scenarier?

I virkelige scenarier behøver java-programmør kun at anvende annotering. Han/hun behøver ikke at oprette og få adgang til annoteringer. Oprettelse og adgang til annotering udføres af implementeringsudbyderen. På vegne af annotationen udfører java compiler eller JVM nogle yderligere operationer.


@Arvet

Som standard nedarves annoteringer ikke til underklasser. @Inherited-annotationen markerer den annotation, der skal nedarves til underklasser.

 @Inherited @interface ForEveryone { }//Now it will be available to subclass also @interface ForEveryone { } class Superclass{} class Subclass extends Superclass{} 

@Dokumenteret

The @Documented Markerer annotationen til medtagelse i dokumentationen.