1. คำอธิบายประกอบที่พบบ่อยที่สุด
•@Override: ใช้กับเมธอดเพื่อบอกผู้อื่นว่าเมธอดนี้จะแทนที่คลาสพาเรนต์
•@เลิกใช้แล้ว: ขอแนะนำไม่ให้ผู้อื่นใช้ API เก่า โดยจะสร้างข้อความเตือนระหว่างการคอมไพล์และสามารถตั้งค่าได้ในทุกองค์ประกอบในโปรแกรม
•@SuppressWarnings: ปิดข้อความเตือนบางอย่างชั่วคราว
•@Entity: ระบุว่าคลาสนี้เป็นคลาสถาวร
2. ออกแบบคำอธิบายประกอบของตัวเอง
อ่านโค้ดก่อนพูด
1. การใช้คำอธิบายประกอบด้วยพารามิเตอร์เดียวเท่านั้น
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ chb.test.annotation;
นำเข้า java.lang.annotation.Documented;
นำเข้า java.lang.annotation.ElementType;
นำเข้า java.lang.annotation.Retention;
นำเข้า java.lang.annotation.RetentionPolicy;
นำเข้า java.lang.annotation.Target;
@เป้าหมาย(ElementType.TYPE)
@การเก็บรักษา (RetentionPolicy.RUNTIME)
@จัดทำเป็นเอกสาร
สาธารณะ @interface MyAnnotation1 {
ค่าสตริง();
-
2. การใช้คำอธิบายประกอบด้วยพารามิเตอร์สองตัว
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ chb.test.annotation;
นำเข้า java.lang.annotation.Documented;
นำเข้า java.lang.annotation.ElementType;
นำเข้า java.lang.annotation.Retention;
นำเข้า java.lang.annotation.RetentionPolicy;
นำเข้า java.lang.annotation.Target;
@Target(ElementType.วิธีการ)
@การเก็บรักษา (RetentionPolicy.RUNTIME)
@จัดทำเป็นเอกสาร
สาธารณะ @interface MyAnnotation2 {
คำอธิบายสตริง ();
บูลีน isAnnotation();
-
3. ชั้นเรียนทดลองคำอธิบายประกอบ
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ chb.test.annotation;
@MyAnnotation1("นี่คือคำอธิบายประกอบ 1")
คำอธิบายประกอบคลาสสาธารณะ {
@MyAnnotation2(description="นี่คือคำอธิบายประกอบ2",isAnnotation=true)
โมฆะสาธารณะ sayHello(){
System.out.println("สวัสดีชาวโลก!");
-
-
4.คลาสคำอธิบายการทดสอบคำอธิบายประกอบ
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ chb.test.annotation;
นำเข้า java.lang.reflect.Method;
นำเข้า org.junit.Test;
TestAnnotation ระดับสาธารณะ {
@ทดสอบ
การทดสอบโมฆะสาธารณะ () พ่น ClassNotFoundException, SecurityException, NoSuchMethodException {
คลาส<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
ธงบูลีน = cls.isAnnotationPresent (MyAnnotation1.class);
ถ้า (ตั้งค่าสถานะ) {
System.out.println("ตัดสินคลาสให้เป็นคำอธิบายประกอบ");
MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);
System.out.println(คำอธิบายประกอบ1.value());
-
วิธีการ วิธีการ = cls.getMethod("sayHello");
flag = method.isAnnotationPresent (MyAnnotation2.class);
ถ้า (ตั้งค่าสถานะ) {
System.out.println("วิธีการตัดสินยังเป็นคำอธิบายประกอบ");
MyAnnotation2 annotation2 = method.getAnnotation(MyAnnotation2.class);
System.out.println(annotation2.description()+"/t"+annotation2.isAnnotation());
-
-
-
จากผลการทดลอง คอนโซลจะแสดงข้อมูลต่อไปนี้:
ตรวจสอบว่าคลาสเป็นคำอธิบายประกอบหรือไม่
นี่คือคำอธิบายประกอบ 1
วิธีการตัดสินก็เป็นคำอธิบายประกอบเช่นกัน
นี่คือคำอธิบายประกอบ 2 จริง
3. บทนำและคำอธิบาย
1. @Target(ElementType.TYPE) ใน MyAnnotation1
ElementType ใน @Target ใช้เพื่อระบุองค์ประกอบประเภทคำอธิบายประกอบที่สามารถใช้ได้ ตัวอย่างเช่น
TYPE (ประเภท), FIELD (แอตทริบิวต์), วิธีการ (วิธีการ), PARAMETER (พารามิเตอร์), CONSTRUCTOR (ตัวสร้าง), LOCAL_VARIABLE (ตัวแปรท้องถิ่น), PACKAGE (แพ็คเกจ) โดยที่ TYPE (ประเภท) หมายถึงประเภทที่สามารถใช้ได้ ประเภทคลาส, อินเทอร์เฟซ, Enum และคำอธิบายประกอบ
2. @Retention(RetentionPolicy.RUNTIME) ใน MyAnnotation1
RetentionPolicy มี 3 กลยุทธ์ ได้แก่
แหล่งที่มา: ข้อมูลประเภทคำอธิบายประกอบนี้จะถูกเก็บไว้ในซอร์สโค้ดของโปรแกรมเท่านั้น หากซอร์สโค้ดถูกคอมไพล์ ข้อมูลคำอธิบายประกอบจะหายไปและจะไม่ถูกเก็บไว้ในไฟล์ .class ที่คอมไพล์แล้ว
•CLASS: ข้อมูลประเภทคำอธิบายประกอบนี้จะถูกเก็บไว้ในซอร์สโค้ดของโปรแกรมและในไฟล์ .class ที่คอมไพล์แล้ว ในระหว่างการดำเนินการ ข้อมูลนี้จะไม่ถูกโหลดลงใน JVM หมายเหตุ: กลยุทธ์เริ่มต้นคือประเภท CLASS
•รันไทม์: ระบุว่าข้อมูลยังคงอยู่ในซอร์สโค้ดและไฟล์ .class ที่คอมไพล์แล้ว และข้อมูลนี้จะถูกโหลดลงใน JVM ระหว่างการดำเนินการ
3. @บันทึกไว้ใน MyAnnotation1
จุดประสงค์คือเพื่อแสดงข้อมูลคำอธิบายประกอบนี้บนเอกสาร JAVA API หากไม่ได้เพิ่ม @Documented ข้อมูลคำอธิบายประกอบที่เกี่ยวข้องจะไม่ปรากฏบนเอกสาร JAVA API
4. @อินเทอร์เฟซใน MyAnnotation1
คีย์เวิร์ด ระบุว่าคลาสถูกกำหนดไว้สำหรับคำอธิบายประกอบ
5. ค่าสตริง() ใน MyAnnotation1;
บ่งชี้ว่ามีพารามิเตอร์สมาชิกที่มีค่าชื่อและสิทธิ์การเข้าถึงเป็นตัวแก้ไขเริ่มต้น โปรดสังเกตสองจุดต่อไปนี้:
•สิทธิ์การเข้าถึงสามารถแก้ไขได้เฉพาะกับสาธารณะและเป็นค่าเริ่มต้น (ค่าเริ่มต้น)
•สมาชิกของพารามิเตอร์สามารถใช้ได้เพียงแปดประเภทข้อมูลพื้นฐาน ได้แก่ ไบต์, สั้น, ถ่าน, int, ยาว, ลอย, สองเท่า, บูลีนและประเภทข้อมูล เช่น สตริง, อีนัม, คลาส, คำอธิบายประกอบ และอาร์เรย์ของประเภทเหล่านี้
6.@MyAnnotation1("นี่คือ annotation1") ใน AnnotationDemo
เนื่องจาก MyAnnotation1 มีเพียงพารามิเตอร์เดียว คุณจึงสามารถเขียนค่าในวงเล็บได้โดยตรง หมายเหตุ: หากคำอธิบายประกอบมีเพียงพารามิเตอร์เดียว ขอแนะนำให้กำหนดชื่อพารามิเตอร์เป็นค่า
7.cls.isAnnotationPresent(MyAnnotation1.class) ใน TestAnnotation
ตรวจสอบว่าคลาสใช้คำอธิบายประกอบของ MyAnnotation1 หรือไม่
8. MyAnnotation1 ใน TestAnnotation annotation1 = cls.getAnnotation(MyAnnotation1.class)
ส่งกลับคำอธิบายประกอบของคลาสนี้สำหรับ MyAnnotation1
9. method.isAnnotationPresent(MyAnnotation2.class) ใน TestAnnotation
ตรวจสอบว่าวิธีการใช้คำอธิบายประกอบของ MyAnnotation2 หรือไม่