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.
- Metoden bør ikke have nogen kast-klausuler
- Metoden skal returnere en af følgende: primitive datatyper, streng, klasse, enum eller matrix af disse datatyper.
- Metoden bør ikke have nogen parameter.
- Vi bør vedhæfte @ lige før grænsefladenøgleord for at definere annotering.
- Det kan tildele en standardværdi til metoden.
Typer af anmærkninger
Der er tre typer anmærkninger.
- Markør annotation
- Enkeltværdianmærkning
- Anmærkning med flere værdier
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 ''; String value3() default 'xyz'; }
Sådan anvender du Multi-Value Annotation
Lad os se koden til at anvende flerværdiannoteringen.
@MyAnnotation(value1=10,value2='Arun Kumar',value3='Ghaziabad')
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:
Elementtyper | Hvor annotationen kan anvendes |
---|---|
TYPE | klasse, grænseflade eller opregning |
MARK | felter |
METODE | metoder |
KONSTRUKTØR | konstruktører |
LOCAL_VARIABLE | lokale variabler |
ANNOTATION_TYPE | anmærkningstype |
PARAMETER | parameter |
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.
Opbevaringspolitik | Tilgængelighed |
---|---|
RetentionPolicy.SOURCE | henviser til kildekoden, kasseret under kompilering. Det vil ikke være tilgængeligt i den kompilerede klasse. |
RetentionPolicy.CLASS | henviser til .class-filen, tilgængelig for java-kompileren, men ikke til JVM. Det er inkluderet i klassefilen. |
RetentionPolicy.RUNTIME | refererer 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('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()); }}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.