คำอธิบายประกอบ Java แบบง่าย
คำอธิบายประกอบแบบง่าย ๆ ที่ JDK5 มีให้มีเพียงสามประเภทเท่านั้น ทั้งสามประเภทนี้ใช้เพื่อป้องกันข้อผิดพลาดหรือเพื่อเตือนความจำ กล่าวคือ:
1.แทนที่
2.เลิกใช้แล้ว
3.ระงับคำเตือน
สิ่งสำคัญคือต้องทราบว่า JDK5 (อีกคำหนึ่งคือ Tiger) ไม่มีคำอธิบายประกอบในตัวจำนวนมาก แต่อนุญาตให้ core Java รองรับความสามารถของคุณลักษณะคำอธิบายประกอบ โดยระบุไว้อย่างเคร่งครัดใน JSR-175 ว่าใช้เพื่ออะไร กำหนดฟังก์ชันข้อมูลเมตา จำเป็นต้องเขียนโดยโปรแกรมเมอร์ประเภทคำอธิบายประกอบแบบกำหนดเอง มาตรฐาน JSR อื่น ๆ ยังได้เขียนชุดของประเภทคำอธิบายประกอบมาตรฐาน ต่อไปนี้จะใช้ตัวอย่างเพื่ออธิบายคำอธิบายประกอบแบบง่าย ๆ ทั้งสามนี้ในเชิงลึก
แทนที่คำอธิบายประกอบ
คำอธิบายประกอบ Override บ่งชี้ว่าวิธีการที่มีคำอธิบายประกอบจำเป็นต้องแทนที่วิธีการในคลาสซุปเปอร์
ถ้าเมธอดใช้คำอธิบายประกอบนี้แต่ไม่ได้แทนที่เมธอดในซูเปอร์คลาส (เช่น การใช้ตัวพิมพ์ใหญ่ผิด หรือพารามิเตอร์ผิด หรือเมธอดถูกกำหนดโดยคลาสย่อยเอง) คอมไพลเลอร์จะสร้างข้อผิดพลาด
(หมายเหตุ: ไม่สามารถใช้คำอธิบายประกอบการแทนที่ใน JRE5 เมื่อใช้วิธีการในอินเทอร์เฟซ JRE6 อนุญาต หลายครั้งที่ JRE5 จะรายงานข้อผิดพลาดนี้)
ตัวอย่างที่ 1 แสดงให้เห็นถึงคำอธิบายประกอบที่เอาชนะ:
ตัวอย่างคำอธิบายประกอบ Java 1:
คัดลอกรหัสรหัสดังต่อไปนี้:
Test_Override คลาสสาธารณะ {
@แทนที่
สตริงสาธารณะ toString() {
return super.toString() + "ทดสอบโดยใช้คำอธิบายประกอบ 'แทนที่'";
-
-
จะเกิดอะไรขึ้นถ้าชื่อวิธีการสะกดผิด ตัวอย่างเช่น หากคุณเปลี่ยนชื่อวิธีการ toString เป็น "tostring" (ตัวพิมพ์เล็กทั้งหมด) คุณจะได้รับข้อความแสดงข้อผิดพลาดที่คล้ายกับข้อความต่อไปนี้เมื่อทำการคอมไพล์:
คัดลอกรหัสรหัสดังต่อไปนี้:
รวบรวมไฟล์ต้นฉบับ 1 ไฟล์ไปยังโฟลเดอร์ D: tempNew (2)
TestJavaApplication1buildclasses
โฟลเดอร์ D:tempNew (2)TestJavaApplication1srctest
myannotationTest_Override.java:24: วิธีการไม่แทนที่
วิธีการจากซูเปอร์คลาส
@แทนที่
1 ข้อผิดพลาด
สร้างล้มเหลว (เวลาทั้งหมด: 0 วินาที)
แน่นอนว่า Eclipse จะรายงานกากบาทสีแดงโดยตรง ตอนนี้ IDE กลายเป็นเรื่องง่ายที่จะใช้แล้ว ผู้เริ่มต้นไม่ควรยุ่งกับบรรทัดคำสั่ง JDK
คำอธิบายประกอบที่เลิกใช้แล้ว
คำอธิบายประกอบนี้บ่งชี้ว่าคอมไพลเลอร์ควรแสดงข้อความเตือนหากโปรแกรมเรียกองค์ประกอบที่เลิกใช้แล้ว (เลิกใช้แล้ว ล้าสมัย และล้าสมัย) ตัวอย่างที่ 2 แสดงวิธีใช้คำอธิบายประกอบที่เลิกใช้แล้ว
ตัวอย่างคำอธิบายประกอบ Java 2
ขั้นแรก สร้างคลาสและทำเครื่องหมายวิธีการว่าเลิกใช้แล้วดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
คลาสสาธารณะ Test_Deprecated {
@เลิกใช้แล้ว
โมฆะสาธารณะทำอะไรบางอย่าง () {
System.out.println("ทดสอบโดยใช้คำอธิบายประกอบที่เลิกใช้แล้ว: 'เลิกใช้แล้ว'");
-
-
จากนั้นให้ลองเรียกเมธอดนี้จากคลาสอื่น:
คัดลอกรหัสรหัสดังต่อไปนี้:
TestAnnotations ระดับสาธารณะ {
โมฆะคงสาธารณะ main (String arg []) พ่นข้อยกเว้น {
TestAnnotations ใหม่ ();
-
TestAnnotations สาธารณะ () {
Test_Deprecated t2=ใหม่ Test_Deprecated();
t2.doSomething();
-
เมธอด doSomething() ในตัวอย่างนี้ถูกประกาศเป็นเมธอดที่เลิกใช้แล้ว ดังนั้น ไม่ควรเรียกเมธอดนี้ในสถานการณ์ปกติ จะไม่มีข้อความเตือนเมื่อคอมไพล์ไฟล์ Test_Deprecated.java จะได้รับข้อความเตือนที่คล้ายกันนี้ (Eclipse จะเตือน):
คัดลอกรหัสรหัสดังต่อไปนี้:
รวบรวม 1 ไฟล์ต้นฉบับไปยังโฟลเดอร์ D:tempNew
(2) คลาส TestJavaApplication1build
D:โฟลเดอร์ tempNew
(2)TestJavaApplication1srctestmyannotation
TestAnnotations.java:27:
คำเตือน: [คัดค้าน] doSomething() ใน
test.myannotation.Test_Deprecated เลิกใช้แล้ว
t2.doSomething();
1 คำเตือน
ระงับคำอธิบายประกอบคำเตือน
คำอธิบายประกอบนี้จะบอกคอมไพเลอร์ว่าข้อความเตือนสำหรับองค์ประกอบที่มีคำอธิบายประกอบและองค์ประกอบย่อยทั้งหมดควรถูกระงับ ข้อความเตือนทั้งหมดสำหรับชุดขององค์ประกอบและองค์ประกอบย่อยจะถูกระงับ ตัวอย่างเช่น สมมติว่าคุณใช้คำอธิบายประกอบ Suppresswarnings ในคลาส ระงับคำเตือน หากคุณใช้คำอธิบายประกอบ Suppresswarnings ในวิธีหนึ่งเพื่อระงับคำเตือนอื่น คำเตือนทั้งสองจะถูกระงับที่ระดับวิธีการ
ตัวอย่างคำอธิบายประกอบ Java 3:
คัดลอกรหัสรหัสดังต่อไปนี้:
TestAnnotations ระดับสาธารณะ {
โมฆะคงสาธารณะ main (String arg []) พ่นข้อยกเว้น {
TestAnnotations ใหม่ (). doSomeTestNow ();
-
@SuppressWarnings({"การคัดค้าน"})
โมฆะสาธารณะ doSomeTestNow () {
Test_Deprecated t2 = ใหม่ Test_Deprecated();
t2.doSomething();
-
-
ในตัวอย่างนี้ @SuppressWarnings ใช้เพื่อระงับข้อความเตือนการเลิกใช้งานที่แสดงในตัวอย่างที่ 2 เนื่องจากคำเตือนประเภทนี้สำหรับวิธีนี้ถูกระงับ คุณจะไม่เห็นคำเตือน "การเลิกใช้" อีกต่อไป
หมายเหตุ: เป็นการดีกว่าที่จะใช้คำอธิบายประกอบนี้ในองค์ประกอบที่อยู่ด้านในสุด ดังนั้น หากคุณต้องการระงับคำเตือนในวิธีการเฉพาะ คุณควรใส่คำอธิบายประกอบในวิธีการแทนที่จะใช้คำอธิบายประกอบในชั้นเรียน
Meta-Annotation (ประเภทคำอธิบายประกอบ Java)
Meta-annotations จริงๆ แล้วเรียกว่า Annotation มี 4 ประเภท ได้แก่
1.เป้าหมาย
2.การเก็บรักษา
3.จัดทำเป็นเอกสาร
4.สืบทอด
คำอธิบายประกอบเป้าหมาย
คำอธิบายประกอบเป้าหมายจะระบุองค์ประกอบเป้าหมายที่ใช้กับประเภทคำอธิบายประกอบ โดยมีค่าประเภทการแจงนับต่อไปนี้:
1.@Target(ElementType.TYPE)--สามารถนำไปใช้กับองค์ประกอบของคลาสใดก็ได้
2.@Target(ElementType.FIELD) - ใช้กับฟิลด์หรือคุณสมบัติเท่านั้น
3.@Target(ElementType.METHOD)--ใช้ได้กับคำอธิบายประกอบวิธีการเท่านั้น
4.@Target(ElementType.PARAMETER) - ใช้กับพารามิเตอร์วิธีการเท่านั้น
5.@Target(ElementType.CONSTRUCTOR)--ใช้ได้กับตัวสร้างเท่านั้น
6.@Target(ElementType.LOCAL_VARIABLE)--ใช้ได้กับตัวแปรท้องถิ่นเท่านั้น
7.@Target(ElementType.ANNOTATION_TYPE)——ระบุว่าประเภทที่ประกาศนั้นเป็นประเภทคำอธิบายประกอบ
ตัวอย่างที่ 4 แสดงให้เห็นถึงคำอธิบายประกอบเป้าหมาย:
ตัวอย่างคำอธิบายประกอบ Java 4
ขั้นแรก มีการกำหนดประเภทคำอธิบายประกอบชื่อ Test_Target พร้อมด้วย @Target meta-annotation ดังที่แสดงด้านล่าง:
คัดลอกรหัสรหัสดังต่อไปนี้:
@Target(ElementType.วิธีการ)
สาธารณะ @interface Test_Target {
สตริงสาธารณะ doTestTarget();
-
จากนั้น สร้างคลาสที่จะมีคำอธิบายประกอบด้วย Test_Target:
คัดลอกรหัสรหัสดังต่อไปนี้:
TestAnnotations ระดับสาธารณะ {
โมฆะคงที่สาธารณะ main (String arg []) {
ใหม่ TestAnnotations().doTestTarget();
-
// ใช้คำอธิบายประกอบกับวิธีการ ตกลง
// จะต้องไม่มีการขึ้นบรรทัดตรงกลาง, 2 บรรทัด ฯลฯ Java ละเว้นการขึ้นบรรทัดที่ซ้ำซ้อน
@Test_Target(doTestTarget="สวัสดีชาวโลก!")
โมฆะสาธารณะ doTestTarget () {
System.out.printf("การทดสอบคำอธิบายประกอบเป้าหมาย");
-
-
คำอธิบายประกอบ @Target(ElementType.METHOD) ระบุว่าประเภทคำอธิบายประกอบสามารถใช้เพื่ออธิบายวิธีการเท่านั้น หากคุณคอมไพล์โค้ดนี้ จะไม่มีข้อความเตือนปรากฏขึ้น อย่างไรก็ตาม จะเกิดอะไรขึ้นหากมีการประกาศคำอธิบายประกอบนี้ในตัวแปรสตริง อะไรเช่นนี้?
คัดลอกรหัสรหัสดังต่อไปนี้:
TestAnnotations ระดับสาธารณะ {
// นี่เป็นแนวทางที่ผิด และการคอมไพล์จะไม่ผ่านเนื่องจากคำอธิบายประกอบอยู่ในระดับที่ไม่ถูกต้อง
// Meta-annotations ระบุว่ามีเพียงวิธีการเท่านั้นที่สามารถใส่คำอธิบายประกอบได้ และไม่สามารถใช้อธิบายคุณสมบัติได้
@Test_Target(doTestTarget="สวัสดีชาวโลก!")
สตริงส่วนตัว str;
โมฆะคงที่สาธารณะ main (String arg []) {
ใหม่ TestAnnotations().doTestTarget();
-
โมฆะสาธารณะ doTestTarget () {
System.out.printf("การทดสอบคำอธิบายประกอบเป้าหมาย");
-
-
การเปลี่ยนแปลงเพียงอย่างเดียวคือการประกาศคำอธิบายประกอบจะย้ายจากระดับเมธอดไปยังระดับฟิลด์ ซึ่งไม่ถูกต้อง เนื่องจากคุณได้กำหนดคำอธิบายประกอบ @Test_Target ให้ใช้เฉพาะในระดับเมธอดเท่านั้น หากคุณพยายามคอมไพล์คลาสนี้ คุณอาจได้รับข้อผิดพลาด ข้อความเช่นนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
"TestAnnotations.java":
D:R_AND_DTestAnnotationsrctestmyannotation
TestAnnotations.java:16:
ประเภทคำอธิบายประกอบใช้ไม่ได้กับการประกาศประเภทนี้ในบรรทัด
16, คอลัมน์ 0
@Test_Target(doTestTarget="สวัสดีชาวโลก!")
-
เกิดข้อผิดพลาดในการรวบรวม javac