อ่าน 8 นาที
คำอธิบายประกอบ Java
ใน ภาษา การ เขียนโปรแกรมคอมพิวเตอร์ Java คำอธิบายประกอบ (annotation) คือรูปแบบหนึ่งของเมตาเดตาเชิงไวยากรณ์ที่ สามารถ เพิ่มลงใน ซอร์สโค้ด Java ได้เช่นเดียวกับ แอตทริบิวต์ [ 1 ]...
คำอธิบายประกอบ Java
ใน ภาษา การเขียนโปรแกรมคอมพิวเตอร์ Java คำอธิบายประกอบ (annotation)คือรูปแบบหนึ่งของเมตาเดตาเชิงไวยากรณ์ที่สามารถเพิ่มลงในซอร์สโค้ด Java ได้เช่นเดียวกับแอตทริบิวต์[ 1 ]คลาสเมธอดตัวแปรพารามิเตอร์และ แพ็ก เกจ Javaสามารถมีคำอธิบายประกอบได้ เช่นเดียวกับ แท็ก Javadocคำอธิบายประกอบ Java สามารถอ่านได้จากไฟล์ต้นฉบับ แต่แตกต่างจาก แท็ก Javadoc ตรง ที่คำอธิบายประกอบ Java ยังสามารถฝังและอ่านได้จากไฟล์คลาส Javaที่สร้างโดยคอมไพเลอร์ Javaซึ่งทำให้สามารถเก็บรักษาคำอธิบายประกอบไว้ในเครื่องเสมือน Javaในขณะรันไทม์และอ่านได้ผ่านการสะท้อน (reflection ) [ 2 ]เป็นไปได้ที่จะสร้างเมตาคำอธิบายประกอบจากคำอธิบายประกอบที่มีอยู่แล้วใน Java [ 3 ]
ประวัติศาสตร์
แพลตฟอร์มJavaมีกลไกการใส่คำอธิบายประกอบเฉพาะกิจต่างๆเช่นตัวtransientแก้ไข หรือ@Deprecatedแท็ก javadoc คำขอข้อกำหนด Java JSR-175 ได้แนะนำสิ่งอำนวยความสะดวกการใส่คำอธิบายประกอบทั่วไป (หรือที่เรียกว่าเมตาเดตา ) ให้กับกระบวนการชุมชน Javaในปี 2545 และได้รับการอนุมัติในเดือนกันยายน 2547 [ 4 ]
ฟังก์ชันการใส่ คำอธิบายประกอบ (Annotations) เริ่มมีให้ใช้งานในตัวภาษาเองตั้งแต่เวอร์ชัน 1.5 ของJava Development Kit (JDK) aptเครื่องมือ นี้ ได้จัดเตรียมอินเทอร์เฟซชั่วคราวสำหรับการประมวลผลคำอธิบายประกอบในระหว่างการคอมไพล์ใน JDK เวอร์ชัน 1.5 ซึ่งต่อมา JSR-269 ได้ทำให้เป็นทางการและรวมเข้ากับ คอมไพเลอร์ javacในเวอร์ชัน 1.6
ในC++26นั้นC++ได้เพิ่มคำอธิบายประกอบสำหรับการสะท้อน (reflection) ซึ่งคล้ายกับคำอธิบายประกอบในภาษา Java
คำอธิบายประกอบในตัว
Java กำหนดชุดคำอธิบายประกอบที่สร้างขึ้นในภาษา จากคำอธิบายประกอบมาตรฐานเจ็ดรายการ สามรายการเป็นส่วนหนึ่งของjava.langและอีกสี่รายการที่เหลือถูกนำเข้าjava.lang.annotationจาก[ 5 ] [ 6 ]
| คำอธิบายประกอบ | บรรจุุภัณฑ์ | คำอธิบาย |
|---|---|---|
@Deprecated | java.lang | ทำเครื่องหมายวิธีการนี้ว่าล้าสมัยแล้ว และจะทำให้เกิดคำเตือนในการคอมไพล์หากมีการใช้วิธีการนี้ |
@FunctionalInterface | java.lang | ระบุว่าอินเทอร์เฟซนี้ถูกออกแบบมาเพื่อใช้งานเป็นอินเทอร์เฟซเชิงฟังก์ชัน |
@Override | java.lang | ระบุว่าเมธอดนี้เขียนทับเมธอดที่กำหนดไว้ในคลาสแม่หากไม่พบเมธอดนี้ในคลาสแม่หรืออินเทอร์เฟซที่ ถูกใช้งาน จะทำให้เกิด ข้อผิดพลาดในการคอมไพล์ |
@SafeVarargs | java.lang | ระงับคำเตือนสำหรับผู้เรียกใช้เมธอดหรือคอนสตรัคเตอร์ทั้งหมดที่มี พารามิเตอร์ generics varargsตั้งแต่ Java 7 เป็นต้นไป |
@SuppressWarnings | java.lang | สั่งให้คอมไพเลอร์ระงับ คำเตือน ระหว่างการคอมไพล์ที่ระบุไว้ในพารามิเตอร์ของคำอธิบายประกอบ |
@Documented | java.lang.annotation | ทำเครื่องหมายหมายเหตุเพิ่มเติมเพื่อรวมไว้ในเอกสาร |
@Inherited | java.lang.annotation | ทำเครื่องหมายคำอธิบายประกอบอีกอันหนึ่งเพื่อส่งต่อไปยังคลาสย่อยของคลาสที่มีคำอธิบายประกอบ (โดยค่าเริ่มต้น คำอธิบายประกอบจะไม่ถูกส่งต่อไปยังคลาสย่อย) |
@Native | java.lang.annotation | ทำเครื่องหมายฟิลด์ที่กำหนดค่าคงที่ว่าอาจถูกอ้างอิงจากโค้ดเนทีฟ |
@Repeatable | java.lang.annotation | ทำเครื่องหมายคำอธิบายประกอบอีกรายการว่าสามารถทำซ้ำได้ |
@Retention | java.lang.annotation | ระบุวิธีการจัดเก็บคำอธิบายประกอบที่ทำเครื่องหมายไว้ ไม่ว่าจะเป็นในโค้ดเท่านั้น คอมไพล์รวมเข้ากับคลาส หรือใช้งานได้ในขณะรันไทม์ผ่านการสะท้อน (reflection) |
@Target | java.lang.annotation | ทำเครื่องหมายคำอธิบายประกอบเพิ่มเติมเพื่อจำกัดประเภทขององค์ประกอบ Java ที่สามารถใช้คำอธิบายประกอบนี้ได้ |
ในJakarta EE (เดิมคือ Java Platform, Enterprise Edition) คำอธิบายประกอบต่อไปนี้ยังมีอยู่ในjakarta.annotation(เดิมjavax.annotation): [ 7 ] [ 8 ]
| คำอธิบายประกอบ | บรรจุุภัณฑ์ | คำอธิบาย |
|---|---|---|
@Generated | jakarta.annotation | ทำเครื่องหมายโค้ดต้นฉบับที่สร้างขึ้น (เช่น ไม่ได้เขียนโดยผู้ใช้ หรือสร้างขึ้นโดยอัตโนมัติโดยคอมพิวเตอร์) |
@Resource | jakarta.annotation | กำหนดให้คลาส เมธอด หรือฟิลด์ เป็นการอ้างอิงถึงทรัพยากร |
@Resources | jakarta.annotation | ประกาศการอ้างอิงถึงทรัพยากร โดยใช้เป็นคอนเทนเนอร์สำหรับประกาศทรัพยากรหลายรายการ |
@PostConstruct | jakarta.annotation | ทำเครื่องหมายเมธอดเพื่อระบุว่าต้องเรียกใช้เมธอดนั้นหลังจากกระบวนการฉีดการพึ่งพา (dependency injection) เพื่อทำการเริ่มต้นใช้งาน กล่าวคือ ต้องเรียกใช้เมธอดนั้นก่อนที่จะใช้งานคลาส |
@PreDestroy | jakarta.annotation | กำหนดให้เมธอดนั้นเป็นการแจ้งเตือนแบบเรียกกลับ (callback notification) เพื่อระบุว่าอินสแตนซ์กำลังอยู่ในกระบวนการถูกลบออกจากคอนเทนเนอร์ กล่าวคือ เมธอดนั้นใช้เพื่อปล่อยทรัพยากรที่อินสแตนซ์ถือครองอยู่ |
@Priority | jakarta.annotation | ทำเครื่องหมายองค์ประกอบโปรแกรมใดๆ เพื่อระบุลำดับการใช้งาน |
@Nonnull | jakarta.annotation | ทำเครื่องหมายองค์ประกอบใดๆ ที่ไม่สามารถเป็นnullได้ |
@Nullable | jakarta.annotation | ทำเครื่องหมายองค์ประกอบใดๆ ที่มีความเป็นไปได้ชัดเจนว่าเป็นnull. |
@RunAs | jakarta.annotation | กำหนดบทบาทด้านความปลอดภัยของแอปพลิเคชันระหว่างการทำงานในคอนเทนเนอร์ Jakarta EE |
@RolesAllowed | jakarta.annotation.security | ทำเครื่องหมายวิธีการเพื่อระบุบทบาทด้านความปลอดภัยที่ได้รับอนุญาตให้เข้าถึงวิธีการนั้น |
@PermitAll | jakarta.annotation.security | ทำเครื่องหมายเมธอดเพื่อระบุว่าบทบาทด้านความปลอดภัยทั้งหมดสามารถเข้าถึงเมธอดนั้นได้ |
@DenyAll | jakarta.annotation.security | ทำเครื่องหมายเมธอดเพื่อระบุว่าบทบาทด้านความปลอดภัยใด ๆ ก็ไม่สามารถเข้าถึงเมธอดนั้นได้ |
@DeclareRoles | jakarta.annotation.security | ระบุบทบาทด้านความปลอดภัยที่แอปพลิเคชันใช้งาน |
@DataSourceDefinition | jakarta.annotation.sql | กำหนดคอนเทนเนอร์DataSourceที่ลงทะเบียนไว้กับJava Naming and Directory Interface (JNDI) |
@DataSourceDefinitions | jakarta.annotation.sql | ประกาศคอนเทนเนอร์DataSourceซึ่งทำหน้าที่เป็นคอนเทนเนอร์สำหรับประกาศแหล่งข้อมูลหลายรายการ |
ก่อนหน้านี้มีคำอธิบายประกอบ@ManagedBeanที่อยู่ในjakarta.annotationซึ่งในอดีตใช้เพื่อประกาศ Managed Bean ซึ่งเป็นวัตถุที่จัดการโดยคอนเทนเนอร์ที่สนับสนุนบริการพื้นฐานจำนวนเล็กน้อย เช่น การฉีดทรัพยากร การเรียกกลับวงจรชีวิต และตัวสกัดกั้น อย่างไรก็ตาม ได้ถูกลบออกไปแล้ว[ 9 ] [ 10 ]
ตัวอย่าง
คำอธิบายประกอบในตัว
ตัวอย่างนี้แสดงให้เห็นถึงการใช้@Overrideคำอธิบายประกอบ (annotation) โดยจะสั่งให้คอมไพเลอร์ตรวจสอบคลาสแม่เพื่อหาเมธอดที่ตรงกัน ในกรณีนี้ จะเกิดข้อผิดพลาดขึ้น เนื่องจากgettype()เมธอดของคลาส Cat ไม่ได้เขียนทับเมธอดgetType()ของคลาส Animal อย่างที่ต้องการ เพราะกรณีตัวอักษรพิมพ์ใหญ่และพิมพ์เล็กไม่ ตรงกัน หาก@Overrideไม่มีคำอธิบายประกอบนี้ เมธอดใหม่ชื่อgettype()จะถูกสร้างขึ้นในคลาส Cat
คลาสสาธารณะAnimal { void speak () สาธารณะ{}public String getType () { return "สัตว์ทั่วไป" ; } }public class Cat extends Animal { @Override public void speak () { // นี่เป็นการเขียนทับที่ดีSystem . out . println ( "Meow." ); } }@Override public String gettype () { // ข้อผิดพลาดขณะคอมไพล์เนื่องจากพิมพ์ผิด: ควรเป็น getType() ไม่ใช่ gettype() return "Cat" ; } }คำอธิบายประกอบแบบกำหนดเอง
การประกาศประเภทคำอธิบายประกอบนั้นคล้ายกับการประกาศอินเทอร์เฟซทั่วไป โดยจะมีเครื่องหมาย @ นำหน้าคำว่า "interface"
// @Twizzle เป็น annotation สำหรับเมธอด toggle() @Twizzle public void toggle () {}// ประกาศ annotation Twizzle public @interface Twizzle {}คำอธิบายประกอบอาจประกอบด้วยชุดคู่คีย์-ค่า ซึ่งจำลองเป็นเมธอดของประเภทคำอธิบายประกอบ การประกาศเมธอดแต่ละรายการจะกำหนดองค์ประกอบของประเภทคำอธิบายประกอบ การประกาศเมธอดต้องไม่มีพารามิเตอร์หรือข้อความแสดงข้อผิดพลาด ประเภทการส่งคืนจำกัดเฉพาะประเภทพื้นฐานสตริงคลาส enum คำอธิบาย ประกอบและอาร์เรย์ของประเภทข้างต้น เมธอดสามารถมีค่าเริ่มต้นได้
// เหมือนกับ: @Edible(value = true) @Edible ( true ) Item item = new Carrot ();public @interface Edible { boolean value () default false ; }@Author ( first = "Oompah" , last = "Loompah" ) Book book = new Book ();public @interface Author { String first (); String last (); }คำอธิบายประกอบเองอาจมีการใส่คำอธิบายเพิ่มเติมเพื่อระบุว่าควรใช้ที่ไหนและเมื่อใด:
import java.lang.annotation.* ;@Retention ( RetentionPolicy . RUNTIME ) // ทำให้สามารถเข้าถึงคำอธิบายประกอบนี้ได้ในขณะรันไทม์ผ่านการสะท้อน@Target ({ ElementType . METHOD }) // คำอธิบายประกอบนี้สามารถใช้ได้กับเมธอดของคลาสเท่านั้นpublic @interface Tweezable {}คอมไพเลอร์สงวนชุดคำอธิบายประกอบพิเศษ (รวมถึง@Deprecated, @Overrideและ@SuppressWarnings) ไว้สำหรับวัตถุประสงค์ทางไวยากรณ์
เฟรม เวิร์กใช้คำอธิบายประกอบอย่างแพร่หลายเพื่อเป็นวิธีที่สะดวกในการใช้พฤติกรรมกับคลาสและเมธอดที่ผู้ใช้กำหนด ซึ่งมิเช่นนั้นจะต้องประกาศในแหล่งภายนอก (เช่น ไฟล์การกำหนดค่า XML) หรือโดยทางโปรแกรม (ด้วยการเรียก API) [ 11 ]ตัวอย่างเช่น ไลบรารีProject Lombokใช้คำอธิบายประกอบอย่างกว้างขวางเพื่อลดโค้ดซ้ำซ้อน[ 12 ]ตัวอย่างต่อไปนี้คือคลาสข้อมูล Jakarta Persistence ที่มีคำอธิบายประกอบ:
แพ็คเกจorg.wikipedia.examples ;import java.io.Serializable ;import jakarta.persistence.Column ; import jakarta.persistence.Entity ; import jakarta.persistence.GenerationType ; import jakarta.persistence.GeneratedValue ; import jakarta.persistence.Id ; import jakarta.persistence.Table ;@Entity // ประกาศให้เป็นเอนทิตี้บีน@Table ( name = "people" ) // แมปบีนกับตาราง SQL "people" public class Person implements Serializable { @Id // แมปสิ่งนี้กับคอลัมน์คีย์หลัก@GeneratedValue ( strategy = GenerationType . AUTO ) // ฐานข้อมูลจะสร้างคีย์หลักใหม่ ไม่ใช่เราprivate Integer id ;@Column ( length = 32 ) // ตัดค่าในคอลัมน์ให้เหลือ 32 ตัว อักษร private String name ;public Integer getId () { return id ; }public void setId ( Integer id ) { this . id = id ; }public String getName () { return name ; }public void setName ( String name ) { this.name = name ; } }คำอธิบายประกอบไม่ใช่การเรียกใช้เมธอดและจะไม่ทำอะไรด้วยตัวมันเอง แต่ระบบจะส่งออบเจ็กต์ของคลาสไปยัง การใช้งาน Jakarta Persistenceในระหว่างการทำงานซึ่งจะดึงคำอธิบายประกอบออกมาเพื่อสร้างการแมปออบเจ็กต์-รีเลชัน
ตัวอย่างที่สมบูรณ์แสดงไว้ด้านล่างนี้:
แพ็คเกจorg.wikipedia.examples.annotation ;import java.lang.annotation.Documented ; import java.lang.annotation.ElementType ; import java.lang.annotation.Inherited ; import java.lang.annotation.Retention ; import java.lang.annotation.RetentionPolicy ; import java.lang.annotation.Target ;@Documented @Retention ( RetentionPolicy . RUNTIME ) @Target ({ ElementType . TYPE , ElementType . METHOD , ElementType . CONSTRUCTOR , ElementType . ANNOTATION_TYPE , ElementType . PACKAGE , ElementType . FIELD , ElementType . LOCAL_VARIABLE }) @Inherited public @interface Unfinished { public enum Priority { LOW , MEDIUM , HIGH } String value (); String [] changedBy () default "" ; String [] lastChangedBy () default "" ; Priority priority () default Priority . MEDIUM ; String createdBy () default "James Gosling" ; String lastChanged () default "2011-07-08" ; }แพ็คเกจorg.wikipedia.examples.annotation ;public @interface UnderConstruction { String owner () default "Patrick Naughton" ; String value () default "Object is Under Construction." ; String createdBy () default "Mike Sheridan" ; String lastChanged () default "2011-07-08" ; }จากนั้นใช้Jakarta Faces :
แพ็คเกจorg.wikipedia.examples.validators ;import jakarta.faces.application.FacesMessage ; import jakarta.faces.component.UIComponent ; import jakarta.faces.context.FacesContext ; import jakarta.faces.validator.Validator ; import jakarta.faces.validator.ValidatorException ;import org.wikipedia.examples.annotation.UnderConstruction ; import org.wikipedia.examples.annotation.Unfinished ; import org.wikipedia.examples.annotation.Unfinished.Priority ; import org.wikipedia.examples.util.Util ;@UnderConstruction ( owner = "Jon Doe" ) public class DateValidator implements Validator { public void validate ( FacesContext context , UIComponent component , Object value ) throws ValidatorException { String date = ( String ) value ; String errorLabel = "กรุณาป้อนวันที่ที่ถูกต้อง" ; if ( ! component . getAttributes (). isEmpty ()) { errorLabel = ( String ) component . getAttributes (). get ( "errordisplayval" ); } }ถ้า( ! Util . validateAGivenDate ( date )) { @Unfinished ( changedBy = "Steve" , value = "whether to add message to context or not, confirm" , priority = Priority . HIGH ) FacesMessage message = new FacesMessage (); message . setSeverity ( FacesMessage . SEVERITY_ERROR ); message . setSummary ( errorLabel ); message . setDetail ( errorLabel ); throw new ValidatorException ( message ); } } }กำลังประมวลผล
เมื่อคอมไพล์ซอร์สโค้ด Java คำอธิบายประกอบสามารถถูกประมวลผลโดยปลั๊กอินของคอมไพเลอร์ที่เรียกว่าตัวประมวลผลคำอธิบายประกอบ ตัวประมวลผลสามารถสร้างข้อความให้ข้อมูลหรือสร้างไฟล์ซอร์สโค้ด Java หรือทรัพยากรเพิ่มเติม ซึ่งในทางกลับกันอาจถูกคอมไพล์และประมวลผล อย่างไรก็ตาม ตัวประมวลผลคำอธิบายประกอบไม่สามารถแก้ไขโค้ดที่มีคำอธิบายประกอบได้ (การแก้ไขโค้ดอาจทำได้โดยใช้วิธีการที่อยู่นอกเหนือข้อกำหนดของภาษา Java) คอมไพเลอร์ Java จะจัดเก็บข้อมูลเมตาของคำอธิบายประกอบไว้ในไฟล์คลาสแบบมีเงื่อนไข หากคำอธิบายประกอบมี `true` RetentionPolicyหรือCLASS` RUNTIMEtrue` ต่อมาJVMหรือโปรแกรมอื่นๆ สามารถค้นหาข้อมูลเมตาเพื่อพิจารณาว่าจะโต้ตอบกับองค์ประกอบของโปรแกรมอย่างไร หรือเปลี่ยนแปลงพฤติกรรมขององค์ประกอบเหล่านั้น
นอกจากการประมวลผลคำอธิบายประกอบโดยใช้ตัวประมวลผลคำอธิบายประกอบแล้ว โปรแกรมเมอร์ Java ยังสามารถเขียนโค้ดของตนเองที่ใช้การสะท้อน (reflection) เพื่อประมวลผลคำอธิบายประกอบได้Java SE 5 รองรับอินเทอร์เฟซใหม่ที่กำหนดไว้ในjava.lang.reflectแพ็กเกจ `<a href="...">` แพ็กเกจนี้ประกอบด้วยอินเทอร์เฟซที่เรียกว่า ` <a href="..."> AnnotatedElement` ซึ่งถูกนำไปใช้โดยคลาสการสะท้อนของ Java ได้แก่Class`<a href="..."> Constructor`, Field` Method<a href="...">`, `<a href="...">` และ `<a href="..."> Package` การใช้งานอินเทอร์เฟซนี้ใช้เพื่อแสดงองค์ประกอบที่มีคำอธิบายประกอบของโปรแกรมที่กำลังทำงานอยู่ใน Java Virtual Machine อินเทอร์เฟซนี้อนุญาตให้สามารถอ่านคำอธิบายประกอบแบบสะท้อนได้
อินAnnotatedElementเทอร์เฟซนี้ช่วยให้เข้าถึงคำอธิบายประกอบที่มีRUNTIMEการเก็บรักษาได้ การเข้าถึงนี้ทำได้โดยเมธอดgetAnnotation` getAnnotationsretention`, `retention` และ ` isAnnotationPresentretention` เนื่องจากประเภทคำอธิบายประกอบจะถูกคอมไพล์และจัดเก็บไว้ในไฟล์ไบต์โค้ดเช่นเดียวกับคลาส คำอธิบายประกอบที่ส่งคืนโดยเมธอดเหล่านี้จึงสามารถสอบถามได้เหมือนกับอ็อบเจ็กต์ Java ทั่วไป ตัวอย่างที่สมบูรณ์ของการประมวลผลคำอธิบายประกอบมีดังต่อไปนี้:
แพ็คเกจorg.wikipedia.examples.annotation ;import java.lang.annotation.Retention ; import java.lang.annotation.RetentionPolicy ;// นี่คือคำอธิบายประกอบที่จะถูกประมวลผล// ค่าเริ่มต้นสำหรับเป้าหมายคือ Java Elements ทั้งหมด// เปลี่ยนนโยบายการเก็บรักษาเป็น RUNTIME (ค่าเริ่มต้นคือ CLASS) @Retention ( RetentionPolicy . RUNTIME ) public @interface TypeHeader { // ระบุค่าเริ่มต้นสำหรับแอตทริบิวต์ developer String developer () default "Unknown" ; String lastModified (); String [] teamMembers (); int meaningOfLife (); }// นี่คือคำอธิบายประกอบที่ใช้กับคลาส@TypeHeader ( developer = "Bob Bee" , lastModified = "2013-02-12" , teamMembers = { "Ann" , "Dan" , "Fran" }, meaningOfLife = 42 ) public class SetCustomAnnotation { // เนื้อหาของคลาสอยู่ที่นี่}แพ็คเกจorg.wikipedia.examples ;// นี่คือโค้ดตัวอย่างที่ประมวลผลคำอธิบายประกอบimport java.lang.annotation.Annotation ; import java.lang.reflect.AnnotatedElement ;public class UseCustomAnnotation { public static void main ( String [] args ) { Class < SetCustomAnnotation > classObject = SetCustomAnnotation . class ; readAnnotation ( classObject ); }static void readAnnotation ( AnnotatedElement element ) { try { System.out.println ( "ค่า ของ องค์ประกอบคำ อธิบายประกอบ: %n" ) ; if ( element.isAnnotationPresent ( TypeHeader.class ) ) { // getAnnotation คืนค่าประเภทคำอธิบายประกอบAnnotation singleAnnotation = element.getAnnotation ( TypeHeader.class ) ; TypeHeader header = ( TypeHeader ) singleAnnotation ;System.out.printf ( " Developer: %s%n" , header.developer ( ) ) ; System.out.printf ( " Last Modified : %s% n " , header.lastModified ( ) ) ;// teamMembers ถูกส่งกลับมาในรูปแบบ String[] System.out.print ( " สมาชิกทีม: " ) ; for ( String member : header.teamMembers ( ) ) { System.out.printf ( " % s , " , member ) ; } System.out.println ( ) ;System.out.println ( "ความหมายของชีวิต: %s % n " , header.meaningOfLife ( ) ) ; } } catch ( Exception e ) { e.printStackTrace ( ) ; } } }ไลบรารีต่างๆ เช่นJUnitใช้การประมวลผลคำอธิบายประกอบเพื่อสร้างการทดสอบหน่วย
ดูเพิ่มเติม
- คำอธิบายประกอบจาการ์ตา
- คุณลักษณะ CLI
- ชวา
- เครื่องเสมือน Java
- สถาปัตยกรรมที่ขับเคลื่อนด้วยแบบจำลอง
- ตัวตกแต่ง (decorators) ในภาษา Pythonได้รับแรงบันดาลใจจากคำอธิบายประกอบ (annotations) ในภาษา Java ซึ่งมีไวยากรณ์ที่คล้ายคลึงกัน
ลิงก์ภายนอก
- บทนำเกี่ยวกับ Annotation ใน Java 6 ที่เว็บไซต์ Sun Developer Network
- บทความเรื่อง "An Introduction to Java Annotations" โดย MM Islam Chisty ถูกเก็บถาวรไว้ในWayback Machine เมื่อวันที่ 28 มีนาคม 2017
- Srinivasan, Krishna (11 สิงหาคม 2550). "Annotations ใน Java 5.0" . JavaBeat . เก็บถาวรจากต้นฉบับเมื่อ 31 พฤษภาคม 2558.
- ฮันท์, จอห์น (24 กุมภาพันธ์ 2549). "เกี่ยวกับคำอธิบายประกอบของ Java" . เดอะ รีจิสเตอร์ .
- "วิธีการสร้างและใช้งานคำอธิบายประกอบแบบกำหนดเองใน Java?" So Many Word 15 กุมภาพันธ์ 2014 เก็บถาวรจากต้นฉบับเมื่อ 23 กุมภาพันธ์ 2014
- "บทเรียนการใช้ Annotation ใน Java พร้อมตัวอย่าง" TutorialsDesk . 9 ตุลาคม 2014.
- Thakor, Vicky (13 ตุลาคม 2015). "ทำความเข้าใจ Annotation ใน Java" . Java by examples .
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ คำอธิบายประกอบ Java
ใน ภาษา การ เขียนโปรแกรมคอมพิวเตอร์ Java คำอธิบายประกอบ (annotation) คือรูปแบบหนึ่งของเมตาเดตาเชิงไวยากรณ์ที่ สามารถ เพิ่มลงใน ซอร์สโค้ด Java ได้เช่นเดียวกับ แอตทริบิวต์ [ 1 ]...
ประวัติศาสตร์
แพลตฟอร์ม Java มีกลไกการใส่คำอธิบายประกอบเฉพาะกิจต่างๆ เช่น ตัว transient แก้ไข หรือ @Deprecated แท็ก javadoc คำขอข้อกำหนด Java JSR-175 ได้แนะนำสิ่งอำนวยความสะดวกการใส่คำอธิบายประกอบทั่วไป (หรือที่เรียกว่า เมตาเดตา ) ให้กับ กระบวนการชุมชน Java ในปี 2545...
คำอธิบายประกอบในตัว
Java กำหนดชุดคำอธิบายประกอบที่สร้างขึ้นในภาษา จากคำอธิบายประกอบมาตรฐานเจ็ดรายการ สามรายการเป็นส่วนหนึ่งของ java.lang และอีกสี่รายการที่เหลือถูกนำเข้า java.lang.annotation จาก [ 5 ] [ 6 ]
คำอธิบายประกอบแบบกำหนดเอง
การประกาศประเภทคำอธิบายประกอบนั้นคล้ายกับการประกาศอินเทอร์เฟซทั่วไป โดยจะมีเครื่องหมาย @ นำหน้า คำว่า "interface"