Anotasi retensi
Anotasi Retensi menunjukkan pada tahap mana anotasi jenis ini akan dipertahankan. Ada tiga nilai:
1.RetentionPolicy.SOURCE - Jenis Anotasi ini hanya dipertahankan pada tingkat kode sumber dan akan diabaikan selama kompilasi.
2.RetentionPolicy.CLASS - Jenis Anotasi ini dipertahankan selama kompilasi dan ada di file kelas, tetapi JVM akan mengabaikannya
3.RetentionPolicy.RUNTIME - Anotasi jenis ini akan disimpan oleh JVM, sehingga dapat dibaca dan digunakan oleh JVM atau kode lain menggunakan mekanisme refleksi saat runtime.
Contoh 5 mendemonstrasikan deklarasi RetentionPolicy.RUNTIME:
Contoh 1 anotasi Java:
Copy kode kodenya sebagai berikut:
@Retensi(Kebijakan Retensi.RUNTIME)
publik @interface Test_Retention {
String doTestRetensi();
}
Dalam contoh ini, anotasi @Retention(RetentionPolicy.RUNTIME) menunjukkan bahwa anotasi Test_Retention akan disimpan oleh mesin virtual sehingga dapat dibaca melalui refleksi saat runtime.
Anotasi yang terdokumentasi
Anotasi Terdokumentasi menunjukkan bahwa anotasi ini harus dicatat oleh alat javadoc. Secara default, javadoc tidak menyertakan anotasi. Namun jika @Documented ditentukan saat mendeklarasikan anotasi, maka akan diproses oleh alat seperti javadoc, sehingga informasi jenis anotasi juga akan disertakan dalam dokumentasi yang dihasilkan. Contoh 6 lebih lanjut menunjukkan penggunaan @Documented:
Contoh 2 anotasi Java:
Copy kode kodenya sebagai berikut:
@Didokumentasikan
publik @interface Test_Documented {
String doTestDocument();
}
Selanjutnya, ubah kelas TestAnnotations sebagai berikut:
Copy kode kodenya sebagai berikut:
TestAnnotations kelas publik {
public static void main(String arg[]) {
TestAnnotations().doSomeTestRetention();
TestAnnotations baru().doSomeTestDocumented();
}
@Test_Retention (doTestRetention="Pertahankan tes informasi anotasi")
public void doSomeTestRetention() {
System.out.printf("Uji jenis anotasi 'Retensi'");
}
@Test_Documented(doTestDocument="Halo dokumen")
kekosongan publik doSomeTestDocumented() {
System.out.printf("Uji jenis anotasi 'Terdokumentasi'");
}
}
Sekarang, jika Anda menggunakan perintah javadoc untuk menghasilkan file TestAnnotations.html, Anda akan melihat hasil yang mirip dengan Gambar 1.
Seperti yang Anda lihat dari tangkapan layar, tidak ada metode informasi tipe anotasi () dari metode doSomeTestRetention() dalam dokumen. Namun, dokumen metode doSomeTestDocumented() memberikan informasi deskripsi anotasi Tag @Documented ditambahkan ke anotasi Test_Documented. Anotasi sebelumnya Test_Retention tidak menentukan tag @Documented.
Anotasi yang diwariskan (mungkin ada yang salah dengan paragraf ini...)
Ini adalah jenis anotasi yang sedikit lebih kompleks. Ini menunjukkan bahwa kelas yang dianotasi akan secara otomatis mewarisi. Lebih khusus lagi, jika tag @Inherited digunakan saat mendefinisikan anotasi, dan kemudian anotasi yang ditentukan digunakan untuk memberi anotasi pada kelas induk lainnya, yaitu kelas induk. memiliki subkelas A, maka semua properti kelas induk akan diwarisi ke dalam subkelasnya. Pada Contoh 7, Anda akan melihat manfaat menggunakan tag @Inherited.
Contoh 3 anotasi Java
Pertama, tentukan anotasi Anda:
Copy kode kodenya sebagai berikut:
@Warisan
publik @interface MyParentObject {
boolean isInherited() defaultnya benar;
String doSomething() default "Melakukan apa?";
}
Selanjutnya, sebuah kelas dianotasi dengan anotasi:
Copy kode kodenya sebagai berikut:
@MyParentObject
Kelas publik MyChildObject {
}
Seperti yang Anda lihat, Anda tidak perlu mendefinisikan metode antarmuka di kelas implementasi. Karena tag @Inherited, metode ini secara otomatis diwariskan lihat di bawah Ini adalah implementasi kuno:
Copy kode kodenya sebagai berikut:
kelas publik MyChildObject mengimplementasikan MyParentObject {
boolean publik yang diwarisi() {
kembali salah;
}
String publik melakukan Sesuatu() {
kembali "";
}
boolean publik sama dengan(Obj objek) {
kembali salah;
}
kode hash int publik() {
kembali 0;
}
String publik keString() {
kembali "";
}
Tipe Anotasi Kelas publik() {
kembalikan nol;
}
}
Apakah Anda melihat perbedaannya? Seperti yang Anda lihat, Anda harus mengimplementasikan semua metode antarmuka induk. Selain metode isInherited() dan doSomething() dari myParentObject, Anda juga perlu mengimplementasikan metode same(), toString( ) dan metode hasCode(). Ada juga metode annotationType() dari kelas java.lang.annotation.Annotation. Baik Anda ingin mengimplementasikan metode ini atau tidak, Anda harus menyertakannya dalam objek yang diwarisi.
sebagai kesimpulan
Artikel ini menunjukkan kepada Anda cara membuat pengembangan lebih mudah dengan menggunakan fitur anotasi JDK5. Anotasi tidak secara langsung mempengaruhi semantik program. Alat pengembangan dan penerapan dapat membaca anotasi ini dan memprosesnya dengan cara tertentu, dan menggunakan program yang berisi anotasi dapat menggantikan file sumber Java tambahan, dokumen XML, atau artefak kuno lainnya. Menggunakan anotasi dapat mencapai hal yang sama dengan lebih sedikit kode dan memiliki deteksi kesalahan waktu kompilasi yang lebih baik. Tujuan dari anotasi adalah untuk menghabiskan lebih sedikit waktu pada detail yang sulit dan tidak berguna dan lebih fokus pada aturan logika bisnis. Artikel ini adalah bagian pertama dari seri anotasi Java. Di bagian kedua, Anda akan mempelajari cara menggunakan anotasi untuk mengembangkan anotasi sederhana Aplikasi web. Terakhir, di bagian ketiga, Anda akan melihat contoh kompleks yang mencakup beberapa tabel database.