Das @inherited in Java ist eine Annotation, die verwendet wird, um eine Annotation zu markieren, die an Unterklassen der annotierten Klasse vererbt werden soll. @inherited ist eine integrierte Annotation, da wir wissen, dass Annotationen wie ein Tag sind, der Metadaten darstellt, die dem Compiler zusätzliche Informationen liefern. Genauso wie integrierte Annotationen, die im Javadoc vorhanden sind, ist es möglich, eine weitere Meta-Annotation aus vorhandenen in Java zu erstellen. Tatsächlich gibt es zwei Arten von Annotationen: eine Art von Annotationen, die auf den Java-Code angewendet wird, wie z. B. @override, und eine andere Art von Annotationen, die auf die andere Annotation angewendet werden, wie z. B. @target @inherited. @inherited ist also eine Annotation, die auf andere Annotationen angewendet wird, deren Unterklassen wir erstellen oder die wir erben möchten, damit ein anderer Benutzer eine Annotation definiert.
WERBUNG Beliebter Kurs in dieser Kategorie JAVA MASTERY - Spezialisierung | 78 Kursreihe | 15 ProbetestsStarten Sie Ihren kostenlosen Softwareentwicklungskurs
Webentwicklung, Programmiersprachen, Softwaretests und andere
Syntax
Die Syntax von @inherited in Java lautet –
@Inherited public @interface MyAnnotation {// code of the MyAnnotation } @MyAnnotation public class SuperClass { // code of the SuperClass } public class SubClass extends SuperClass { // code of the SubClass }
Wie in der obigen Syntax wird die Klasse SubClass von der Annotation @MyAnnotation geerbt, da sie von SuperClass geerbt wird und SuperClass eine @MyAnnotation-Annotation hat.
Die @Inherited-Annotation wird verwendet oder mit der Annotation versehen (MyAnnotation wie in der obigen Syntax), der die @interface vorangestellt werden sollte. Als nächstes kann diese Annotation (MyAnnotation) überall dort verwendet werden, wo sie als @MyAnnotation angewendet werden muss. Diese Annotationen können direkt vor der Deklaration eines Elements angewendet werden und können auf jedes Element des Programms wie Variablen, Klassen, Konstruktoren, Methoden usw. angewendet werden. Wenn diese benutzerdefinierte Annotation in der Oberklasse mit Annotationen versehen wird, wird sie automatisch an sie vererbt Unterklassen (Unterklasse wie in der obigen Syntax), wie wir in den folgenden Beispielen sehen können.
Als nächstes schreiben wir den Java-Code, um die @Inherited-Annotation anhand des folgenden Beispiels besser zu verstehen, in dem wir die @Inherited-Annotation verwenden, um in der Unterklasse von der Oberklasse zu erben, wie unten –
Zuerst erstellen wir eine Schnittstelle für die Annotation @MyAnnotation, die zwei Felder enthält: Name und Code.
Code: //MyAnnotation.java
package demo; import java.lang.annotation.Inherited; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Inherited @Target ({ElementType.TYPE, ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) public @interface MyAnnotation { String name () default "unknown"; String code () default " "; }
Als nächstes erstellen wir eine Superklasse, um die obige Annotation zu verwenden, indem wir eine beliebige Klasse, Methode oder Variable mit Annotationen versehen und den Statusnamen und den Statuscode bereitstellen.
Code: //Super.java
package demo; import demo.MyAnnotation; @MyAnnotation (name = "Karnataka", code = "KA") public class Super { public String getstateinfo () { return null; } }
Als nächstes verwenden wir eine Anmerkung, da es sich um Metadaten handelt, was bedeutet, dass wir in der Lage sein sollten, diese Metadaten oder Informationen abzurufen, um die Anmerkungsinformationen zu verwenden, wenn wir sie benötigen.
Code: //Demo.java
//as sub class package demo; import demo.MyAnnotation; import demo.Super; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; public class Demo extends Super { public static void main ( String[] arg ) throws Exception { new Super (); Class <Super>obj = Super.class; getstateinfo (obj); Method m = obj.getMethod ("getstateinfo", new Class[]{}); getstateinfo (m); } static void getstateinfo (AnnotatedElement e) { try { System.out.println ("Finding annotations on " + e.getClass ().getName ()); Annotation[] annotations = e.getAnnotations (); for (Annotation a : annotations) { if (a instanceof MyAnnotation) { MyAnnotation stateInfo = (MyAnnotation) a; System.out.println("Name of Annotation :" + stateInfo.annotationType ()); System.out.println("State Name :" + stateInfo.name ()); System.out.println("State code :" + stateInfo.code ()); System.out.println(new Demo ().getClass ().getAnnotation (MyAnnotation.class)); System.out.println(new Super ().getClass ().getAnnotation (MyAnnotation.class)); } } } catch (Exception ex) { System.out.println( ex ); } } }
Ausgabe: Wenn wir die Demo.java-Klasse ausführen, ist die Ausgabe.
Erklärung: Wie im obigen Code wird die MyAnnotation-Annotation erstellt und auch von @Inherited mit Anmerkungen versehen. In der Superklasse wurde die MyAnnotation-Annotation durch die Anweisung @MyAnnotation verwendet und der Klasse mit Anmerkungen versehen. Und es wird eine weitere Klasse Demo erstellt, die die Unterklasse der Superklasse ist, da sie zur Superklasse erweitert wird. Weiter in der main()-Methode der Demo-Klasse erstellt ein Objekt der Superklasse seine Methode getstateinfo() und greift darauf zu. Durch diese Methode iteriert es alle seine Anmerkungen und prüft, ob die Anmerkung in MyAnnotation enthalten ist. Wenn ja, werden einige gedruckt der Informationen, wie wir oben sehen können. Aber eine wichtige Sache ist, dass die Demo-Klasse oder eines ihrer Elemente nicht mit MyAnnotation versehen ist, aber dennoch zeigt, dass MyAnnotation dieser Klasse mit Anmerkungen versehen ist, da sie der Superklasse inhärent ist und die Superklasse von MyAnnotation geerbt wird.
Als nächstes schreiben wir den obigen Java-Code um, um die @Inherited-Annotation anhand des folgenden Beispiels besser zu verstehen. Dabei verwenden wir die @Inherited-Annotation nicht für die Annotation MyAnnotation (wie im obigen Beispiel erstellte Annotation), um zu überprüfen, ob diese Annotation vererbt wird in der Unterklasse seiner Oberklasse oder nicht, wie unten –
Wir werden die Klassen Super.java und Demo.java wie oben beibehalten und keine Änderungen an diesen Klassen vornehmen, aber in der Klasse MyAnnotation.java nehmen wir kaum Änderungen vor, wir entfernen lediglich die Annotation @Inherited, die mit Anmerkungen versehen werden soll, aus MyAnnotation. wie wir unten sehen können –
Code: //MyAnnotation.java
package demo; import java.lang.annotation.Inherited; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; // no @Inherited @Target ({ElementType.TYPE, ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) public @interface MyAnnotation { String name () default "unknown"; String code () default " "; }
Ausgabe: Als nächstes, wenn wir die Demo.java-Klasse ausführen, ist die Ausgabe.
Erklärung: Wie in der obigen Ausgabe können wir sehen, dass nach dem Statuscode der „Null“-Wert gedruckt wird, das ist der Rückgabewert der Anweisung „new Demo ().getClass () .getAnnotation (MyAnnotation.class)“, was bedeutet, dass die Demo-Klasse keine MyAnnotation-Annotation von ihrer Superklasse geerbt (oder annotiert) hat, da die @Inherited-Annotation nicht an MyAnnotation annotiert ist, um sie in der Unterklasse zu erben.
Das @inherited in Java ist eine integrierte Annotation, die auf eine andere Annotation angewendet wird. Es wird verwendet, um eine Annotation zu markieren, die an Unterklassen der annotierten Klasse vererbt werden soll. Das @inherited ist im Paket java.lang.annotation.Inherited.
verfügbarDas obige ist der detaillierte Inhalt vonJava @Inherited. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!