1. Anotasi paling umum
•@Override: digunakan pada metode untuk memberi tahu orang lain bahwa metode ini mengesampingkan kelas induk
•@Deprecated: Disarankan agar orang lain tidak menggunakan API lama. Ini akan menghasilkan pesan peringatan selama kompilasi dan dapat diatur pada semua elemen dalam program.
•@SuppressWarnings: Menonaktifkan sementara beberapa pesan peringatan
•@Entity: Menunjukkan bahwa kelas ini adalah kelas persisten
2. Rancang Anotasi sendiri
Baca kodenya terlebih dahulu sebelum berbicara
1. Implementasi anotasi hanya dengan satu parameter
Copy kode kodenya sebagai berikut:
paket chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retensi(Kebijakan Retensi.RUNTIME)
@Didokumentasikan
publik @interface MyAnnotation1 {
Nilai string();
}
2. Implementasi anotasi dengan dua parameter
Copy kode kodenya sebagai berikut:
paket chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retensi(Kebijakan Retensi.RUNTIME)
@Didokumentasikan
publik @interface MyAnnotation2 {
Deskripsi string();
boolean isAnnotation();
}
3. Anotasi kelas eksperimen
Copy kode kodenya sebagai berikut:
paket chb.test.annotation;
@MyAnnotation1("ini adalah anotasi1")
Demo Anotasi kelas publik {
@MyAnnotation2(description="ini adalah annotation2",isAnnotation=true)
kekosongan publik sayHello(){
System.out.println("halo dunia!");
}
}
4. Kelas deskripsi tes anotasi
Copy kode kodenya sebagai berikut:
paket chb.test.annotation;
import java.lang.reflect.Method;
import org.junit.Test;
Kelas publik TestAnnotation {
@Tes
public void test() melempar ClassNotFoundException, SecurityException, NoSuchMethodException{
Kelas<?> cls = Kelas.forName("chb.test.annotation.AnnotationDemo");
boolean flag = cls.isAnnotationPresent(MyAnnotation1.class);
jika(bendera){
System.out.println("Nilai kelas yang akan diberi anotasi");
MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);
Sistem.keluar.println(annotation1.value());
}
Metode metode = cls.getMethod("sayHello");
flag = metode.isAnnotationPresent(MyAnnotation2.class);
jika(bendera){
System.out.println("Metode penilaian juga merupakan anotasi");
MyAnnotation2 annotation2 = metode.getAnnotation(MyAnnotation2.class);
Sistem.keluar.println(annotation2.description()+"/t"+annotation2.isAnnotation());
}
}
}
Sebagai hasil percobaan, konsol mengeluarkan informasi berikut:
Tentukan apakah kelas tersebut anotasi
ini anotasi1
Metode penilaian juga merupakan anotasi
ini anotasi2 benar
3. Pendahuluan dan penjelasan
1. @Target(ElementType.TYPE) di MyAnnotation1
ElementType di @Target digunakan untuk menentukan elemen mana yang dapat digunakan tipe Anotasi.
TYPE (tipe), FIELD (atribut), METHOD (metode), PARAMETER (parameter), CONSTRUCTOR (konstruktor), LOCAL_VARIABLE (variabel lokal), PACKAGE (paket), dimana TYPE (tipe) mengacu pada tipe yang dapat digunakan dalam Tipe Kelas, Antarmuka, Enum, dan Anotasi.
2. @Retention(RetentionPolicy.RUNTIME) di MyAnnotation1
RetentionPolicy memiliki tiga strategi, yaitu:
•SUMBER: Informasi jenis Anotasi ini hanya akan disimpan dalam kode sumber program. Jika kode sumber dikompilasi, data Anotasi akan hilang dan tidak akan disimpan dalam file .class yang telah dikompilasi.
•CLASS: Informasi jenis Anotasi ini disimpan dalam kode sumber program dan juga dalam file .class yang dikompilasi. Selama eksekusi, informasi ini tidak akan dimuat ke dalam JVM. Catatan: Strategi defaultnya adalah tipe CLASS
•RUNTIME: Menunjukkan bahwa informasi disimpan dalam kode sumber dan file .class yang dikompilasi, dan informasi ini akan dimuat ke dalam JVM selama eksekusi.
3. @Didokumentasikan di MyAnnotation1
Tujuannya adalah untuk menampilkan informasi Anotasi ini pada dokumen JAVA API. Jika @Documented tidak ditambahkan, informasi anotasi yang relevan tidak akan ditampilkan pada dokumen JAVA API.
4. @interface di MyAnnotation1
Kata kunci, menunjukkan bahwa kelas ditentukan untuk Anotasi
5. Nilai string() di MyAnnotation1;
Menunjukkan bahwa ada parameter anggota dengan nilai nama dan hak akses sebagai pengubah default. Perhatikan dua poin berikut:
•Hak akses hanya dapat diubah dengan public dan default (default)
•Anggota parameter hanya dapat menggunakan delapan tipe data dasar byte, short, char, int, long, float, double, boolean dan tipe data seperti String, Enum, Class, annotations, dan array dari tipe ini
6.@MyAnnotation1("ini adalah annotation1") di AnnotationDemo
Karena MyAnnotation1 hanya memiliki satu parameter, Anda dapat menuliskan nilainya langsung di dalam tanda kurung. Catatan: Jika Anotasi hanya memiliki satu parameter, disarankan agar nama parameter ditentukan sebagai nilai
7.cls.isAnnotationPresent(MyAnnotation1.class) di TestAnnotation
Tentukan apakah kelas menggunakan anotasi MyAnnotation1
8. MyAnnotation1 di TestAnnotation annotation1 = cls.getAnnotation(MyAnnotation1.class)
Mengembalikan anotasi kelas ini untuk MyAnnotation1
9. metode.isAnnotationPresent(MyAnnotation2.class) di TestAnnotation
Tentukan apakah metode tersebut menggunakan anotasi MyAnnotation2