Ringkasan
Java memperkenalkan anotasi dalam versi 1.5, juga dikenal sebagai Java Annotation. Anotasi adalah sejenis metadata sintaks yang dapat digunakan secara langsung dalam kode sumber, dan kelas/metode/variabel/parameter/nama paket, dll. Dapat dijelaskan. Tidak seperti tag Javadoc, kompiler dapat mempertahankan kode anotasi saat menghasilkan file kelas. Pada saat yang sama, untuk menggunakan anotasi selama proses run-time, mesin virtual Java menjaga anotasi, sehingga informasi yang relevan tentang anotasi dapat diperoleh melalui refleksi.
Anotasi bawaan
Bahkan, kita sering menemukan anotasi, seperti @Override, @Deprecated, dll. Ini semua adalah anotasi bawaan di JDK. Pertama-tama mari kita lihat anotasi bawaan utama di Java.
• Anotasi yang bertindak berdasarkan kode java
◦@override memeriksa apakah metode adalah metode penulisan ulang. Jika metode ini tidak ditemukan di kelas induk atau antarmuka yang diimplementasikan, kesalahan kompilasi akan terjadi.
◦@tanda usir bahwa metode atau kelas dibuang. Jika kelas atau metode digunakan, proses kompilasi akan mengingatkan Anda.
◦@SuppressWarnings memberi tahu kompiler untuk mengabaikan peringatan tentang parameter beranotasi
◦@safevarargs mengabaikan peringatan tentang metode panggilan atau konstruktor yang mengandung parameter generik, 1.7 telah menambahkan anotasi
◦@FunctionalInterface menunjukkan bahwa antarmuka yang dinyatakan akan digunakan sebagai antarmuka fungsional. 1.8 telah menambahkan anotasi
• Anotasi yang dilakukan pada anotasi lain disebut anotasi meta (anotasi meta)
◦@retensi menentukan kapan anotasi beranotasi digunakan (yaitu, ketika anotasi akan dipertahankan)
■ Retensi hanya dalam kode sumber dan dibuang selama kompilasi (retentionpolicy.runtime)
■ Anotasi disimpan ke file kelas selama kompilasi, dan diabaikan saat file kelas dimuat (retensipolicy.class)
■ Anotasi dibaca saat file kelas dimuat, yaitu, anotasi tersedia selama operasi. Anotasi dapat diperoleh melalui refleksi (retensipolicy.runtime)
◦@didokumentasikan menunjukkan bahwa ketika menghasilkan Javadoc, anotasi beranotasi akan ditulis ke dokumen Javadoc.
◦@Target Menentukan ruang lingkup anotasi anotasi ■ elementType.type: Digunakan untuk menggambarkan kelas, antarmuka (termasuk jenis anotasi) atau ENUM Decklaration ■ ElementType.Field: Digunakan untuk menggambarkan domain ■ elementType.method: digunakan untuk menggambarkan metode ■ elementtype.parameter: digunakan untuk menggambarkan parameter. Konstruktor ■ ElementType.Local_Variable: Digunakan untuk menggambarkan variabel lokal ■ elementType.annotation_type: Digunakan untuk menggambarkan anotasi ■ elementType.package: digunakan untuk menggambarkan paket tersebut
◦ @diwarisi menunjukkan bahwa anotasi diwarisi, yaitu, jika jenis anotasi yang dimodifikasi oleh @inHerited digunakan untuk kelas, anotasi juga akan bertindak pada subclass dari kelas yang dimodifikasi.
◦@Diulang menunjukkan bahwa anotasi beranotasi dapat diterapkan pada objek yang sama beberapa kali. 1.9 telah menambahkan anotasi
Anotasi khusus
Saya telah menyebutkan begitu banyak anotasi di atas, dan semua orang berfokus pada anotasi meta. Saat kami menyesuaikan anotasi, kami biasanya menggunakan anotasi meta untuk membantu kami. Format anotasi khusus adalah nama anotasi @Interface @Interface {bodi definisi}. Saat menggunakan anotasi khusus @Interface, antarmuka java.lang.annotation.Annotation diwariskan secara otomatis. Saat menyesuaikan anotasi, anotasi atau antarmuka lain tidak dapat diwariskan. Metode yang dinyatakan dalam anotasi sebenarnya adalah parameter komentar. Nama metode ini adalah nama parameter, dan jenis nilai pengembalian adalah jenis parameter. Nilai default parameter dapat dideklarasikan melalui default.
Anotasi khusus sederhana, gunakan @interface untuk menentukan anotasi, sebagai berikut.
@Retention (retentionpolicy.runtime) @Target (elementType.type) @documentedpublic @interface classInfo {string worhor () default "wang"; Date string (); String comments ();} Anotasi khusus yang disebut ClassInfo. Menurut @retention, Anda dapat mengetahui bahwa anotasi ini akan selalu ada, yaitu, anotasi ini masih berlaku saat program berjalan; @Target (elementType.type) berarti bahwa anotasi ClassInfo bertindak pada kelas, antarmuka atau deklarasi enum; @Documented
Instruksi Informasi ClassInfo dapat ditulis ke dalam dokumen Javadoc.
Mari kita lihat beberapa parameter anotasi dalam anotasi khusus. Ada tiga parameter anotasi. Parameter anotasi dapat diatur secara default, seperti parameter anotasi penulis, nilai default adalah Wang, dan dua parameter lainnya tidak memiliki nilai default.
Mari kita lihat anotasi khusus lainnya.
@Retention (retentionpolicy.runtime) @target (elementType.method) public @interface methodInfo {string description () default "no description"; Date string ();}Metode anotasi khusus ini bertindak berdasarkan metode ini, dan anotasi ini juga akan ada saat program berjalan; Ada dua parameter anotasi di dalamnya.
Untuk memberi anotasi definisi parameter (definisi metode), Anda hanya dapat menggunakan dua pengubah hak akses publik atau default. Jenis parameter mendukung tipe berikut.
• Delapan tipe data dasar (byte, int, short, long, float, double, char, boolean)
• Jenis string
• Jenis kelas
• Jenis enum
• Jenis anotasi
• Array dari semua jenis di atas
Penggunaan anotasi
Selain dua anotasi di atas, anotasi dengan ruang lingkup lapangan telah ditambahkan.
@Retention (retentionpolicy.runtime) @target (elementType.field) public @interface fieldInfo {string type (); Name string ();}Jika nilai default tidak dideklarasikan dalam anotasi khusus, parameter ini harus diberi nilai saat menggunakan anotasi khusus, jika tidak, kompiler akan melaporkan kesalahan.
Lihatlah kode yang digunakan oleh anotasi:
@Classsinfo (penulis = "wang", date = "2016/9/13", komentar = "annotation demo") kelas publik annotationDemo {@FieldInfo (type = "public", name = "firstfield") public int firstfield; @FieldInfo (type = "private", name = "SecondField") Private String Secondfield; @Methodinfo (description = "Metode dalam annotationDemo", name = "firstmethod") public void firstMethod (nilai string) {System.out.printf ("Metode pertama terlibat"); } @Methodinfo (description = "Metode dalam annotationDemo", name = "SecondMethod") Private void SecondMethod () {System.out.printf ("Metode pertama terlibat"); }}Dapatkan informasi anotasi
Untuk mendapatkan informasi anotasi, pertama -tama kita harus memastikan bahwa anotasi akan ada selama program berjalan. Oleh karena itu, kami umumnya menambahkan anotasi meta @retention (retentionpolicy.runtime) ke anotasi khusus. Dengan cara ini, selama program menjalankan, kita dapat memperoleh beberapa informasi anotasi melalui refleksi. Untuk instruksi tentang refleksi, Anda dapat melihat artikel ini.
Public Class AnnotationTest {public static void main (string [] args) {resolveclassannotationInfo (annotationDemo.class); ResolveFieldanNotationInfo (AnnotationDemo.class); resolveMethodannotationInfo (annotationDemo.class); } private static void resolveclassannotationInfo (class <?> clz) {// Tentukan apakah kelas ini memiliki anotasi classInfo if (clz.isannotationpresent (classInfo.class)) {classInfo classInfo = (classInfo) clz.getannotation (classInfo.classInfo = (classInfo) clz.getannotation (classInfo.classInclass) (classInfo) clz.getannotation (classInfo.classclass) (classInfo) clz.getanNotation (classInfo.classIndass) (classInfo) clz.getannotation (classInfo.classIndas System.out.println (classInfo.author () + "" + classInfo.comments () + "" + classInfo.date ()); }} private static void resolveFieldannotationInfo (class <?> clz) {field [] fields = clz.getDeclaredFields (); untuk (bidang bidang: bidang) {if (field.isannotationPresent (fieldInfo.class)) {fieldInfo fieldInfo = (fieldInfo) field.getannotation (fieldInfo.class); System.out.println (fieldInfo.type () + "" + fieldInfo.name ()); }}} private static void resolVeMethoDannotationInfo (class <?> clz) {Method [] Method = clz.getDeclaredMethods (); untuk (metode metode: metode) {if (method.isAnnotationPresent (methodInfo.class)) {methodInfo methodInfo = (methodInfo) method.getannotation (methodInfo.class); System.out.println (MethodInfo.name () + "" + MethodInfo.Description ()); }}}}Refleksi untuk memperoleh bidang/metode di kelas, dll., Dan mendapatkan anotasi yang relevan melalui getAnnotation () atau getannotations (). Anda dapat memperoleh informasi spesifik dengan mendapatkan anotasi spesifik.
Output dari hasil lari adalah sebagai berikut:
Diagram Hasil Operasi Gambar-1
Meringkaskan
Untuk pemula Java dan bahkan pengembang Java dengan pengalaman tertentu, mereka mungkin memiliki lebih sedikit paparan anotasi Java. Pada kenyataannya, anotasi jarang digunakan, tetapi mereka akan sering melihatnya dalam kode. Artikel ini adalah pengantar sederhana untuk anotasi, dan setidaknya pada tingkat kode, bebas stres untuk dibaca.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.