คำอธิบายประกอบคืออะไร:
คำอธิบายประกอบ (คำอธิบายประกอบ) เป็นวิธีและวิธีการจัดทำโดย Java เพื่อเชื่อมโยงข้อมูลและข้อมูลเมตาใด ๆ (ข้อมูลเมตา) กับองค์ประกอบในโปรแกรมเมตา คำอธิบายประกอบ (คำอธิบายประกอบ) เป็นส่วนต่อประสาน โปรแกรมสามารถรับวัตถุคำอธิบายประกอบขององค์ประกอบโปรแกรมที่ระบุผ่านการสะท้อน จากนั้นรับข้อมูลเมตาในคำอธิบายประกอบผ่านวัตถุคำอธิบายประกอบ
คำอธิบายประกอบ (คำอธิบายประกอบ) ถูกนำมาใช้ใน JDK5.0 และเวอร์ชันที่ใหม่กว่า สามารถใช้เพื่อสร้างเอกสาร ติดตามการขึ้นต่อกันในโค้ดของคุณ และแม้แต่ดำเนินการตรวจสอบเวลาคอมไพล์พื้นฐาน ในบางวิธี คำอธิบายประกอบถูกใช้เหมือนกับตัวแก้ไข และนำไปใช้กับการประกาศแพ็คเกจ ประเภท ตัวสร้าง วิธีการ ตัวแปรสมาชิก พารามิเตอร์ และตัวแปรโลคัล ข้อมูลนี้ถูกจัดเก็บไว้ในคู่โครงสร้าง "name=value" ของ Annotation
สมาชิกของคำอธิบายประกอบได้รับการประกาศเป็นวิธีการแบบไม่มีพารามิเตอร์ในประเภทคำอธิบายประกอบ ชื่อวิธีการและค่าที่ส่งคืนจะกำหนดชื่อและประเภทของสมาชิก มีไวยากรณ์เริ่มต้นเฉพาะที่นี่: อนุญาตให้ประกาศค่าเริ่มต้นของสมาชิกคำอธิบายประกอบใดๆ ได้: คำอธิบายประกอบสามารถใช้คู่ name=value เป็นค่าของสมาชิกคำอธิบายประกอบที่ไม่ได้กำหนดค่าเริ่มต้น แน่นอนว่าชื่อ คู่ =value ยังสามารถใช้เพื่อแทนที่ค่าเริ่มต้นของค่าสมาชิกอื่นๆ ได้ สิ่งนี้ค่อนข้างคล้ายกับลักษณะการสืบทอดของคลาส ตัวสร้างของคลาสพาเรนต์สามารถใช้เป็นตัวสร้างเริ่มต้นของคลาสย่อยได้ แต่คลาสย่อยก็สามารถแทนที่ได้เช่นกัน
คำอธิบายประกอบสามารถใช้เพื่อเชื่อมโยงข้อมูลใดๆ กับองค์ประกอบของโปรแกรม (คลาส, วิธีการ, ตัวแปรสมาชิก ฯลฯ) ควรสังเกตว่ามีกฎพื้นฐานอยู่ที่นี่: คำอธิบายประกอบไม่สามารถส่งผลต่อการทำงานของโค้ดโปรแกรมได้ ไม่ว่าจะเพิ่มหรือลบคำอธิบายประกอบก็ตาม โค้ดจะถูกดำเนินการอย่างสม่ำเสมอ นอกจากนี้ แม้ว่าคำอธิบายประกอบบางส่วนจะเข้าถึงได้ที่รันไทม์ผ่านวิธีสะท้อน API ของ Java แต่ตัวแปลภาษา Java จะเพิกเฉยต่อคำอธิบายประกอบเหล่านี้ในขณะที่ทำงาน เป็นเพราะเครื่องเสมือน Java ละเว้นคำอธิบายประกอบว่าประเภทคำอธิบายประกอบ "ไม่ทำงาน" ในโค้ด ข้อมูลในประเภทคำอธิบายประกอบสามารถเข้าถึงได้และประมวลผลผ่านเครื่องมือสนับสนุนบางอย่างเท่านั้น บทความนี้จะครอบคลุมถึงประเภทคำอธิบายประกอบมาตรฐานและคำอธิบายประกอบแบบเมตา เครื่องมือที่มาพร้อมกับประเภทคำอธิบายประกอบเหล่านี้คือคอมไพเลอร์ Java (ซึ่งแน่นอนว่าจัดการด้วยวิธีพิเศษบางอย่าง)
-------------------------------------------------- -------------------------------------------------- ----------------------------------
ข้อมูลเมตาคืออะไร (ข้อมูลเมตา):
Metadata แปลมาจากคำว่า Metadata ซึ่งแปลว่า "ข้อมูลเกี่ยวกับข้อมูล"
ข้อมูลเมตามีฟังก์ชันมากมาย ตัวอย่างเช่น คุณอาจใช้ความคิดเห็น Javadoc เพื่อสร้างเอกสารคู่มือโดยอัตโนมัติ นี่คือฟังก์ชันข้อมูลเมตาประเภทหนึ่ง โดยทั่วไป ข้อมูลเมตาสามารถใช้เพื่อสร้างเอกสาร การขึ้นต่อกันของโค้ดติดตาม ตรวจสอบรูปแบบเวลาคอมไพล์ และแทนที่ไฟล์การกำหนดค่าที่มีอยู่ หากเราต้องการแยกประเภทของบทบาทของ metadata ขณะนี้ยังไม่มีคำจำกัดความที่ชัดเจน แต่เราสามารถแบ่งคร่าวๆ ได้เป็น 3 ประเภทตามบทบาทของข้อมูล:
1. การเขียนเอกสาร: การสร้างเอกสารผ่านข้อมูลเมตาที่ระบุในรหัส 2. การวิเคราะห์รหัส: การวิเคราะห์รหัสผ่านข้อมูลเมตาที่ระบุในรหัส 3. การตรวจสอบการคอมไพล์: การใช้ข้อมูลเมตาที่ระบุในรหัส คอมไพเลอร์สามารถบรรลุการคอมไพล์ขั้นพื้นฐาน ตรวจสอบว่า ข้อมูลเมตาใน Java มีอยู่ในโค้ด Java ในรูปแบบของแท็ก การมีอยู่ของแท็กข้อมูลเมตาไม่ส่งผลต่อการคอมไพล์และการทำงานของโค้ดโปรแกรม ใช้เพื่อสร้างไฟล์อื่น ๆ หรือเพื่อทราบโค้ดที่ทำงานขณะรันไทม์เท่านั้น ข้อมูล.
โดยสรุป:
ประการแรก ข้อมูลเมตามีอยู่ในโค้ด Java ในรูปแบบของแท็ก
ประการที่สอง ข้อมูลที่อธิบายโดยข้อมูลเมตานั้นมีประเภทที่ปลอดภัย กล่าวคือ ฟิลด์ภายในข้อมูลเมตานั้นมีประเภทที่ชัดเจน
ประการที่สาม ข้อมูลเมตาจำเป็นต้องมีการประมวลผลเพิ่มเติมโดยเครื่องมืออื่นที่ไม่ใช่คอมไพเลอร์ที่ใช้ในการสร้างส่วนประกอบอื่นๆ ของโปรแกรม
ประการที่สี่ ข้อมูลเมตาสามารถมีอยู่ได้ในระดับซอร์สโค้ด Java เท่านั้น หรืออาจมีอยู่ในไฟล์ Class ที่คอมไพล์แล้ว
-------------------------------------------------- -------------------------------------------------- ----------------------------------
ประเภทคำอธิบายประกอบและคำอธิบายประกอบ:
คำอธิบายประกอบ:
คำอธิบายประกอบใช้ไวยากรณ์ใหม่ที่นำมาใน java5.0 และลักษณะการทำงานของมันจะคล้ายกับตัวแก้ไข เช่น สาธารณะและขั้นสุดท้าย คำอธิบายประกอบแต่ละรายการมีชื่อและจำนวนสมาชิก >=0 สมาชิกของคำอธิบายประกอบแต่ละตัวมีชื่อและค่าที่เรียกว่าคู่ name=value (เช่นเดียวกับ javabean) และ name=value จะโหลดข้อมูลคำอธิบายประกอบ
ประเภทคำอธิบายประกอบ:
ประเภทคำอธิบายประกอบจะกำหนดชื่อ ประเภท และค่าเริ่มต้นสมาชิกของคำอธิบายประกอบ ประเภทคำอธิบายประกอบสามารถกล่าวได้ว่าเป็นอินเทอร์เฟซ Java พิเศษ ตัวแปรสมาชิกถูกจำกัด และจำเป็นต้องมีไวยากรณ์ใหม่เมื่อประกาศประเภทคำอธิบายประกอบ เมื่อเราเข้าถึง Annotation ผ่าน Java Reflection API ค่าที่ส่งคืนจะเป็นออบเจ็กต์ที่ใช้อินเทอร์เฟซประเภทคำอธิบายประกอบ การเข้าถึงออบเจ็กต์นี้ทำให้เราสามารถเข้าถึงสมาชิก Annotation ได้อย่างง่ายดาย บทต่อไปนี้จะกล่าวถึงประเภทคำอธิบายประกอบมาตรฐานสามประเภทที่รวมอยู่ในแพ็คเกจ java.lang ของ java5.0
-------------------------------------------------- -------------------------------------------------- ----------------------------------
หมวดหมู่คำอธิบายประกอบ:
ตามจำนวนพารามิเตอร์คำอธิบายประกอบ เราสามารถแบ่งคำอธิบายประกอบออกเป็น 3 ประเภท:
1. คำอธิบายประกอบแบบทำเครื่องหมาย: ประเภทคำอธิบายประกอบที่ไม่มีคำจำกัดความของสมาชิกเรียกว่าคำอธิบายประกอบแบบทำเครื่องหมาย คำอธิบายประกอบประเภทนี้ใช้เฉพาะการมีหรือไม่มีของตัวเองเพื่อให้ข้อมูลแก่เราเท่านั้น ตัวอย่างเช่น คำอธิบายประกอบระบบต่อไปนี้ @Override;
2. คำอธิบายประกอบค่าเดียว 3. คำอธิบายประกอบที่สมบูรณ์
ตามการใช้งานและวัตถุประสงค์ของคำอธิบายประกอบ เราสามารถแบ่งคำอธิบายประกอบได้เป็น 3 ประเภท ได้แก่
1. คำอธิบายประกอบระบบในตัว JDK 2. คำอธิบายประกอบ Meta 3. คำอธิบายประกอบที่กำหนดเอง
-------------------------------------------------- -------------------------------------------------- ----------------------------------
คำอธิบายประกอบมาตรฐานในตัวของระบบ:
ไวยากรณ์ของคำอธิบายประกอบนั้นค่อนข้างง่าย ยกเว้นการใช้สัญลักษณ์ @ โดยพื้นฐานแล้วจะสอดคล้องกับไวยากรณ์โดยธรรมชาติของ Java มีคำอธิบายประกอบมาตรฐานสามรายการที่สร้างไว้ใน JavaSE ซึ่งกำหนดไว้ใน java.lang:
@Override: ใช้เพื่อแก้ไขเมธอดนี้เพื่อแทนที่เมธอดของคลาสพาเรนต์
@Deprecated: ใช้เพื่อแก้ไขวิธีการที่ล้าสมัย
@SuppressWarnings: ใช้เพื่อแจ้งเตือนคอมไพเลอร์ Java เพื่อระงับคำเตือนการคอมไพล์เฉพาะ
มาดูฟังก์ชันและสถานการณ์การใช้งานของคำอธิบายประกอบมาตรฐานในตัวทั้งสามรายการตามลำดับกัน
-------------------------------------------------- -------------------------------------------------- ----------------------------------
@Override จำกัดการแทนที่เมธอดคลาสพาเรนต์:
@Override เป็นประเภทคำอธิบายประกอบแบบ marker ที่ใช้ในการอธิบายวิธีการ มันแสดงให้เห็นว่าเมธอดที่มีคำอธิบายประกอบนั้นโอเวอร์โหลดเมธอดของคลาสพาเรนต์และมีบทบาทในการยืนยัน หากเราใช้คำอธิบายประกอบประเภทนี้ในวิธีที่ไม่ได้แทนที่วิธีคลาสพาเรนต์ คอมไพลเลอร์ Java จะเตือนคุณเกี่ยวกับข้อผิดพลาดในการคอมไพล์ คำอธิบายประกอบนี้มักจะเกิดขึ้นเมื่อเราพยายามแทนที่เมธอดคลาสพาเรนต์แต่เขียนชื่อเมธอดผิด การใช้งานนั้นง่ายมาก: เมื่อใช้คำอธิบายประกอบนี้ เพียงเพิ่ม @Override หน้าวิธีที่แก้ไข รหัสต่อไปนี้เป็นตัวอย่างของการใช้ @Override เพื่อแก้ไขเมธอด displayName() ของความพยายามที่จะแทนที่คลาสพาเรนต์ แต่มีข้อผิดพลาดในการสะกด:
โมฆะสาธารณะ displayName(){
System.out.println("ชื่อของผลไม้คือ: *****");
-
-
คลาส Orange ขยายผลไม้ {
@แทนที่
โมฆะสาธารณะ displayName(){
System.out.println("ชื่อของผลไม้คือ: ส้ม");
-
-
คลาส Apple ขยาย Fruit {
@แทนที่
ชื่อที่แสดงเป็นโมฆะสาธารณะ () {
System.out.println("ชื่อของผลไม้คือ: Apple");
-
-
@Deprecated แท็กเลิกใช้แล้ว:
ในทำนองเดียวกัน Deprecated ก็เป็นคำอธิบายประกอบของมาร์กอัปด้วย เมื่อประเภทหรือสมาชิกประเภทถูกตกแต่งด้วย @Deprecated คอมไพลเลอร์จะไม่สนับสนุนการใช้องค์ประกอบโปรแกรมที่มีคำอธิบายประกอบนี้ และการแก้ไขประเภทนี้มี "ความต่อเนื่อง" ในระดับหนึ่ง: หากเราใช้ประเภทหรือสมาชิกที่ล้าสมัยนี้ในโค้ดผ่านการสืบทอดหรือการเขียนทับแม้ว่าประเภทหรือสมาชิกที่สืบทอดหรือถูกแทนที่จะไม่ถูกประกาศ @Deprecated คอมไพเลอร์ยังคงต้องเตือน คุณ.
เป็นที่น่าสังเกตว่ามีความแตกต่างระหว่างประเภทคำอธิบายประกอบ @Deprecated และแท็ก @deprecated ใน javadoc: แท็กแรกได้รับการยอมรับโดยคอมไพเลอร์ java ในขณะที่ประเภทหลังได้รับการยอมรับโดยเครื่องมือ javadoc และใช้เพื่อสร้างเอกสารประกอบ (รวมถึงสาเหตุที่โปรแกรม สมาชิกล้าสมัยและมีคำอธิบายว่าควรห้ามหรือเปลี่ยนอย่างไร)
ใน Java 5.0 คอมไพเลอร์ Java ยังคงค้นหาแท็ก @deprecated Javadoc และใช้แท็กเหล่านี้เพื่อสร้างข้อความเตือนเช่นเดียวกับในเวอร์ชันก่อนหน้า แต่สถานการณ์นี้จะเปลี่ยนไปในเวอร์ชันต่อ ๆ ไป และเราควรเริ่มใช้ @Deprecated ทันทีเพื่อตกแต่งวิธีการที่เลิกใช้แล้วแทนแท็ก @deprecated javadoc
ในโปรแกรมต่อไปนี้ คำอธิบายประกอบ @Deprecated ใช้เพื่อทำเครื่องหมายวิธีการว่าหมดอายุแล้ว ในเวลาเดียวกัน แท็ก @deprecated จะถูกใช้ในคำอธิบายประกอบวิธีการเพื่อทำเครื่องหมายวิธีการว่าหมดอายุแล้ว รหัสจะเป็นดังนี้:
-
* @deprecated วิธีการนี้หมดอายุแล้วและไม่แนะนำ
-
@เลิกใช้แล้ว
โมฆะสาธารณะ showTaste(){
System.out.println("รสชาติของแอปเปิ้ลผลไม้คือ: กรอบและหวาน");
-
โมฆะสาธารณะ showTaste (int typeId) {
ถ้า(typeId==1){
System.out.println("รสชาติของผลไม้แอปเปิ้ลคือ: เปรี้ยว");
-
อย่างอื่นถ้า (typeId==2){
System.out.println("รสชาติของแอปเปิ้ลผลไม้คือ: หวาน");
-
อื่น{
System.out.println("รสชาติของแอปเปิ้ลผลไม้คือ: กรอบและหวาน");
-
-
-
FruitRun คลาสสาธารณะ {
-
* @param args
-
โมฆะสาธารณะคงหลัก (สตริง [] args) {
แอปเปิ้ล แอปเปิ้ล=แอปเปิ้ลใหม่();
แอปเปิ้ล.displayName();
AppleService appleService=ใหม่ AppleService();
appleService.showTaste();
appleService.showTaste (0);
appleService.showTaste (2);
-
-
-------------------------------------------------- -------------------------------------------------- ----------------------------------
SuppressWarnings ระงับคำเตือนของคอมไพเลอร์:
@SuppressWarnings ใช้ในการเลือกปิดคำเตือนคอมไพเลอร์สำหรับคลาส วิธีการ ตัวแปรสมาชิก และการเริ่มต้นตัวแปร ใน java5.0 คอมไพลเลอร์ javac ที่ sun จัดเตรียมตัวเลือก -Xlint ให้กับเราเพื่อให้คอมไพเลอร์สามารถเตือนโค้ดโปรแกรมที่ถูกกฎหมายได้ คำเตือนนี้แสดงถึงข้อผิดพลาดของโปรแกรมในระดับหนึ่ง ตัวอย่างเช่น เมื่อเราใช้คลาสคอลเลกชันทั่วไปโดยไม่ต้องระบุประเภท คอมไพเลอร์จะแจ้งเตือน "unchecked warning" โดยปกติเมื่อเกิดเหตุการณ์เช่นนี้ เราจะต้องค้นหารหัสที่ทำให้เกิดคำเตือน ถ้ามันแสดงถึงข้อผิดพลาดจริงๆ เราต้องแก้ไขให้ถูกต้อง ตัวอย่างเช่น หากข้อความเตือนระบุว่าคำสั่ง switch ในโค้ดของเราไม่ครอบคลุมทุกกรณีที่เป็นไปได้ เราควรเพิ่มกรณีเริ่มต้นเพื่อหลีกเลี่ยงคำเตือนนี้
บางครั้งเราไม่สามารถหลีกเลี่ยงคำเตือนนี้ได้ ตัวอย่างเช่น เราไม่สามารถหลีกเลี่ยงคำเตือนที่ไม่ได้ตรวจสอบนี้เมื่อเราใช้คลาสคอลเลกชันทั่วไปที่ต้องโต้ตอบกับโค้ดเก่าที่ไม่ใช่แบบทั่วไป @SuppressWarning จะมีประโยชน์ในเวลานี้ เพิ่มการแก้ไข @SuppressWarnings ก่อนวิธีการเรียกเพื่อบอกให้คอมไพเลอร์หยุดคำเตือนเกี่ยวกับวิธีการนี้
SuppressWarning ไม่ใช่คำอธิบายประกอบมาร์กอัป มีสมาชิกประเภท String[] ค่าของสมาชิกนี้คือชื่อคำเตือนที่ต้องห้าม สำหรับคอมไพเลอร์ javac ชื่อคำเตือนที่ถูกต้องสำหรับตัวเลือก -Xlint ก็ใช้ได้กับ @SuppressWarings เช่นกัน และคอมไพลเลอร์จะละเว้นชื่อคำเตือนที่ไม่รู้จัก
ไวยากรณ์คำอธิบายประกอบอนุญาตให้ชื่อคำอธิบายประกอบต้องตามด้วยวงเล็บ ในวงเล็บคือคู่ชื่อ = ค่าที่คั่นด้วยเครื่องหมายจุลภาค ใช้เพื่อกำหนดค่าให้กับสมาชิกของคำอธิบายประกอบ ตัวอย่างมีดังนี้:
@SuppressWarnings(value={ "rawtypes", "unchecked" })
รายการคงที่สาธารณะ <ผลไม้> getFruitList(){
รายการ<ผลไม้> FruitList=ใหม่ ArrayList();
กลับรายการผลไม้;
-
@SuppressWarnings({ "rawtypes", "ไม่เลือก" })
รายการคงที่สาธารณะ <ผลไม้> getFruit(){
รายการ<ผลไม้> FruitList=ใหม่ ArrayList();
กลับรายการผลไม้;
-
@SuppressWarnings("ไม่ได้ใช้")
โมฆะคงที่สาธารณะ main (String [] args) {
รายการ<String> strList=new ArrayList<String>();
-
-
คำอธิบายโดยย่อของค่าพารามิเตอร์ทั่วไปที่มีคำอธิบายประกอบโดย SuppressWarnings:
1.deprecation: คำเตือนเมื่อมีการใช้คลาสหรือเมธอดที่เลิกใช้แล้ว
2. ไม่ได้ตรวจสอบ: คำเตือนเมื่อมีการดำเนินการแปลงที่ไม่ได้ตรวจสอบ เช่น เมื่อใช้คอลเลกชัน จะไม่มีการใช้ข้อมูลทั่วไปเพื่อระบุประเภทของคอลเลกชันที่บันทึกไว้
3.fallthrough: คำเตือนเมื่อบล็อกโปรแกรม Switch นำไปสู่สถานการณ์ถัดไปโดยตรงโดยไม่มี Break;
4.path: คำเตือนเมื่อมีเส้นทางที่ไม่มีอยู่ในเส้นทางคลาส เส้นทางไฟล์ต้นฉบับ ฯลฯ ;
5.serial: คำเตือนเมื่อคำจำกัดความ serialVersionUID หายไปในคลาสที่ทำให้เป็นอนุกรมได้
6.finally: คำเตือนเมื่อไม่สามารถกรอกประโยคสุดท้ายได้ตามปกติ
7.all: คำเตือนเกี่ยวกับสถานการณ์ข้างต้นทั้งหมด