@inherited dalam Java ialah anotasi yang digunakan untuk menandakan anotasi yang akan diwarisi kepada subkelas kelas beranotasi. @inherited ialah anotasi terbina dalam, seperti yang kita tahu bahawa anotasi adalah seperti teg yang mewakili metadata yang memberikan maklumat tambahan kepada pengkompil. Sama seperti anotasi terbina dalam, iaitu keluar dalam Javadoc, adalah mungkin untuk mencipta anotasi meta lain daripada yang sedia ada dalam java. Sebenarnya terdapat dua jenis anotasi, satu jenis anotasi digunakan pada kod java seperti @override dan satu lagi jenis anotasi digunakan pada anotasi lain seperti @target @inherited. Jadi @inherited ialah anotasi yang digunakan pada anotasi lain yang kami ingin cipta subkelas atau kami ingin warisi untuk membuat anotasi takrif pengguna lain.
IKLAN Kursus Popular dalam kategori ini JAVA MASTERY - Pengkhususan | 78 Siri Kursus | 15 Ujian Olok-olokMulakan Kursus Pembangunan Perisian Percuma Anda
Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain
Sintaks
Sintaks @inherited dalam java ialah –
@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 }
Seperti dalam sintaks di atas, SubClass kelas diwarisi daripada anotasi @MyAnnotation, kerana ia diwarisi daripada SuperClass dan SuperClass mempunyai anotasi @MyAnnotation.
Anotasi @Inherited digunakan atau diberi anotasi pada anotasi (MyAnnotation seperti dalam sintaks di atas), yang harus didahulukan oleh @interface. Seterusnya, anotasi ini (MyAnnotation) boleh digunakan di mana-mana sahaja perlu memohon sebagai @MyAnnotation. Anotasi ini boleh digunakan sejurus sebelum pengisytiharan elemen dan boleh digunakan pada mana-mana elemen program seperti pembolehubah, kelas, pembina, kaedah, dll. Apabila anotasi yang ditentukan pengguna ini dianotasi pada superclass, ia diwarisi secara automatik kepada subkelas (subkelas seperti dalam sintaks di atas), seperti yang dapat kita lihat dalam contoh di bawah.
Seterusnya, kami menulis kod java untuk memahami anotasi @Inherited dengan lebih jelas dengan contoh berikut di mana kami menggunakan anotasi @Inherited untuk mewarisi dalam subkelas daripada superclass, seperti di bawah –
Pertama, kami mencipta antara muka untuk anotasi @MyAnnotation, yang mempunyai dua medan, nama dan kod.
Kod: //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 " "; }
Seterusnya, kami mencipta superclass untuk menggunakan anotasi di atas dengan menganotasi mana-mana kelas atau kaedah atau pembolehubah dan memberikan nama negeri dan kod negeri.
Kod: //Super.java
package demo; import demo.MyAnnotation; @MyAnnotation (name = "Karnataka", code = "KA") public class Super { public String getstateinfo () { return null; } }
Seterusnya, kami menggunakan anotasi kerana ia adalah metadata, yang bermaksud kami sepatutnya boleh mendapatkan metadata atau maklumat ini untuk menggunakan maklumat anotasi apabila kami memerlukannya.
Kod: //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 ); } } }
Output: Apabila kita menjalankan kelas Demo.java, outputnya ialah.
Penjelasan: Seperti dalam kod di atas, anotasi MyAnnotation dicipta juga diberi anotasi oleh @Inherited. Dalam Superclass, anotasi MyAnnotation telah digunakan oleh pernyataan @MyAnnotation dan dianotasi kepada kelas. Dan Demo kelas lain dicipta, iaitu subkelas Superclass kerana ia dilanjutkan kepada Superclass. Lebih jauh dalam kaedah utama () kelas Demo, objek Superclass sedang mencipta dan mengakses kaedahnya iaitu getstateinfo (), melalui kaedah ini melaraskan semua anotasinya dan menyemak sama ada anotasi itu tidak berkaitan MyAnnotation, jika ya, cetak beberapa daripada maklumat seperti yang dapat kita lihat di atas. Tetapi satu perkara penting ialah kelas Demo atau mana-mana elemennya tidak diberi anotasi pada MyAnnotation, tetapi ia masih menunjukkan bahawa MyAnnotation dianotasikan kepada kelas ini kerana ia wujud kepada Superclass dan Superclass diwarisi MyAnnotation.
Seterusnya, kami menulis semula kod java di atas untuk memahami anotasi @Inherited dengan lebih jelas dengan contoh berikut di mana kami tidak akan menggunakan anotasi @Inherited untuk anotasi MyAnnotation (sebagai anotasi yang dibuat dalam contoh di atas) untuk menyemak sama ada anotasi ini diwarisi dalam subkelas daripada superclassnya atau tidak, seperti di bawah –
Kami akan memastikan kelas Super.java dan Demo.java sama seperti di atas tiada perubahan dalam kelas tersebut, tetapi dalam kelas MyAnnotation.java, kami melakukan sedikit perubahan, cuma kami mengalih keluar anotasi @Inherited untuk dianotasi daripada MyAnnotation, seperti yang kita boleh lihat di bawah –
Kod: //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 " "; }
Output: Seterusnya, apabila kita menjalankan kelas Demo.java, outputnya ialah.
Penjelasan: Seperti dalam output di atas, kita dapat melihat bahawa selepas kod keadaan, nilai “null” dicetak, iaitu nilai pulangan bagi pernyataan “new Demo ().getClass () .getAnnotation (MyAnnotation.class)”, yang bermaksud bahawa kelas demo tidak diwarisi (atau diberi anotasi) sebarang anotasi MyAnnotation daripadanya Superclass, kerana anotasi @Inherited tidak dianotasi kepada MyAnnotation untuk mewarisinya dalam subkelas.
@inherited in java ialah anotasi terbina dalam yang digunakan pada anotasi lain. Ia digunakan untuk menandakan anotasi yang akan diwarisi kepada subkelas kelas beranotasi. @inherited tersedia dalam pakej java.lang.annotation.Inherited.
Atas ialah kandungan terperinci Java @Diwarisi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!