1. RetentionPolicy.Source: คำอธิบายประกอบจะถูกเก็บไว้ในไฟล์ต้นฉบับเท่านั้น เมื่อไฟล์ Java ถูกรวบรวมลงในไฟล์คลาสคำอธิบายประกอบจะถูกยกเลิก
2. RETINGIENTPOLICY.CLASS: คำอธิบายประกอบถูกเก็บไว้ในไฟล์คลาส แต่ถูกยกเลิกเมื่อ JVM โหลดไฟล์คลาส นี่คือวงจรชีวิตเริ่มต้น
3. REVENITIONPICALY.RUNTIME: คำอธิบายประกอบไม่เพียง แต่บันทึกไว้ในไฟล์คลาส แต่ยังคงมีอยู่หลังจาก JVM โหลดไฟล์คลาส
วงจรชีวิตทั้งสามนี้สอดคล้องกับ: ไฟล์แหล่ง Java (ไฟล์. java) --->. ไฟล์คลาส ----> bytecode ในหน่วยความจำ
แล้วคุณจะเลือกวงจรชีวิตคำอธิบายประกอบที่เหมาะสมได้อย่างไร?
ก่อนอื่นเราต้องชี้แจงแหล่งความยาววงจรชีวิต <คลาส <runtime ดังนั้นที่อดีตสามารถกระทำได้หลังสามารถทำหน้าที่ โดยทั่วไปหากคุณต้องการรับข้อมูลคำอธิบายประกอบแบบไดนามิกที่รันไทม์คุณสามารถใช้คำอธิบายประกอบรันไทม์เท่านั้น หากคุณต้องการดำเนินการประมวลผลล่วงหน้าบางอย่างในเวลาคอมไพล์เช่นการสร้างรหัสเสริม (เช่น Butterknife) คุณสามารถใช้คำอธิบายประกอบชั้นเรียนได้ หากคุณทำการตรวจสอบการดำเนินการบางอย่างเช่น @Override และ @SuppressWarnings คุณสามารถใช้คำอธิบายประกอบที่มาได้
ต่อไปนี้เป็นแอปพลิเคชั่นที่ใช้คำอธิบายประกอบรันไทม์อย่างง่าย
รับหมายเหตุประกอบ
คุณต้องได้รับคำอธิบายประกอบรันไทม์ผ่านการสะท้อนกลับซึ่งสามารถรับได้จากแพ็คเกจชั้นเรียนฟิลด์วิธีการ .... วิธีการพื้นฐานเหมือนกัน วิธีการทั่วไปหลายวิธีมีดังนี้:
/*** รับคำอธิบายประกอบของประเภทที่ระบุ*/สาธารณะ <a ขยายคำอธิบายประกอบ> การ getannotation (คลาส <a> คำอธิบายประกอบ);/*** รับหมายเหตุประกอบทั้งหมดถ้ามีคำอธิบายประกอบ*/สาธารณะ [] getannotations ();/*** รับหมายเหตุประกอบทั้งหมด ในองค์ประกอบนี้ให้กลับมาจริงถ้ามีมิฉะนั้น false*/public boolean isannotationpresent (คลาส <? ขยายคำอธิบายประกอบ> คำอธิบายประกอบ annotationType);/***รับคำอธิบายประกอบทั้งหมดสำหรับพารามิเตอร์ในวิธี*/คำอธิบายประกอบสาธารณะ [] [] getParameterannotations ();
ในการใช้ฟังก์ชั่นเหล่านี้คุณต้องได้รับองค์ประกอบที่เกี่ยวข้องก่อนการสะท้อน: คลาส, ฟิลด์, วิธีการ ฯลฯ
คำอธิบายประกอบที่กำหนดเอง
มาดูวิธีง่ายๆในการใช้คำอธิบายประกอบที่กำหนดเอง ที่นี่ก่อนอื่นเรากำหนด 3 คำอธิบายประกอบรันไทม์:
// คลาสที่เกี่ยวข้อง, อินเทอร์เฟซ (รวมถึงประเภทคำอธิบายประกอบ) หรือ enum @retention (retentionPolicy.runtime) @Target (ElementType.type) สาธารณะ @Interface classInfo {ค่าสตริง (); } // แอตทริบิวต์ฟิลด์ที่ใช้งานได้รวมถึงค่าคงที่ enum @retention (RetentionPolicy.runtime) @Target (ElementType.field) สาธารณะ @Interface FieldInfo {int [] value (); } // วิธีการที่เกี่ยวข้อง @retention (RetentionPolicy.runtime) @Target (ElementType.Method) Public @Interface MethodInfo {ชื่อสตริง () ค่าเริ่มต้น "ยาว"; ข้อมูลสตริง (); อายุ int () ค่าเริ่มต้น 27; -คำอธิบายประกอบทั้งสามนี้ใช้กับองค์ประกอบที่แตกต่างกันและทั้งหมดมีคุณลักษณะที่แตกต่างกัน เมื่อใช้คำอธิบายประกอบคุณต้องตั้งค่าแอตทริบิวต์เหล่านี้
กำหนดคลาสทดสอบอื่นเพื่อใช้คำอธิบายประกอบเหล่านี้:
/*** ทดสอบคำอธิบายประกอบรันไทม์*/@classInfo ("คลาสทดสอบ") คลาสสาธารณะ testruntimeannotation {@fieldinfo (value = {1, 2}) สตริงสาธารณะ FieldInfo = "FiledInfo";@fieldInfo (ค่า = {10086}) getMethodinfo () {return testruntimeannotation.class.getSimplename ();}}มันยังใช้ง่ายมาก สุดท้ายมาดูวิธีรับข้อมูลคำอธิบายประกอบในรหัส:
/*** ทดสอบคำอธิบายประกอบรันไทม์*/โมฆะส่วนตัว _testruntimeannotation () {StringBuffer SB = ใหม่ StringBuffer (); คลาส <?> cls = testruntimeannotation.class; constructor <?> [] constructors = cls.getConstructors (); ") .append ("/n "); classInfo classInfo = cls.getannotation (classInfo.class); ถ้า (classInfo! = null) {sb.append (modifier.toString (cls.getModifiers ()). ค่า: ") .Append (classInfo.Value ()). ผนวก ("/n/n ");} sb.append (" คำอธิบายประกอบภาคสนาม: ") .append ("/n "); ฟิลด์ [] ฟิลด์ = cls.getDeclaredfields (); null) {sb.append (modifier.toString (field.getModifiers ())). ผนวก (") .append (field.getType (). getSimplename ()). ภาคผนวก (" ") .append (field.getName () ") .append (array.toString (fieldInfo.Value ())). ผนวก ("/n/n ");}} sb.append (" คำอธิบายประกอบวิธี: ") .append ("/n ") วิธี [] วิธีการ = วิธีการ cls.getDeclaredMethods Method.getNanotation (MethodInfo.class); if (methodInfo! = null) {sb.append (modifier.toString (method.getModifiers ())). ผนวก ("") .append (method.getName ()). ผนวก ("/n"); sb.append ("ค่าคำอธิบายประกอบ:") .append ("/n"); sb.append ("ชื่อ:") .append (methodInfo.name ()). ") .append (MethodInfo.data ()). ผนวก ("/n "); sb.append (" อายุ: ") .append (methodInfo.age ()). ผนวก ("/n ");}} system.out.print (sb.toString ();การดำเนินการจะทำเพื่อให้ได้องค์ประกอบที่เกี่ยวข้องผ่านการสะท้อนจากนั้นรับคำอธิบายประกอบในองค์ประกอบและในที่สุดก็ได้รับค่าแอตทริบิวต์ของคำอธิบายประกอบ
มาดูผลลัพธ์ที่นี่ฉันจะแสดงโดยตรงบนโทรศัพท์ของฉัน:
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของแนวคิดพื้นฐานของคำอธิบายประกอบภาษา Java และฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!