จุดประสงค์ของคำอธิบายประกอบใน Java คืออะไร? ฉันมีความคิดที่คลุมเครือเกี่ยวกับพวกเขาในระหว่างความคิดเห็นและรหัสจริง มีผลต่อโปรแกรมในขณะรันหรือไม่
ประเพณีของพวกเขาคืออะไร?
เป็นเอกลักษณ์ของ Java หรือไม่? เทียบเท่า C ++ หรือไม่?
จุดประสงค์ของคำอธิบายประกอบใน Java คืออะไร? ฉันมีความคิดที่คลุมเครือเกี่ยวกับพวกเขาในระหว่างความคิดเห็นและรหัสจริง มีผลต่อโปรแกรมในขณะรันหรือไม่
ประเพณีของพวกเขาคืออะไร?
เป็นเอกลักษณ์ของ Java หรือไม่? เทียบเท่า C ++ หรือไม่?
คำตอบ:
คำอธิบายประกอบส่วนใหญ่จะใช้โดยรหัสที่ตรวจสอบโค้ดอื่น ๆ มักใช้สำหรับการปรับเปลี่ยน (เช่นการตกแต่งหรือการตัด) คลาสที่มีอยู่ในขณะรันไทม์เพื่อเปลี่ยนพฤติกรรม เฟรมเวิร์กเช่นJUnitและHibernateใช้คำอธิบายประกอบเพื่อลดจำนวนโค้ดที่คุณต้องเขียนเองเพื่อใช้เฟรมเวิร์ก
Oracle มีคำอธิบายที่ดีเกี่ยวกับแนวคิดและความหมายใน Javaบนไซต์ของพวกเขา
นอกจากนี้ยังเป็นเอกลักษณ์เฉพาะของ Java มีเทียบเท่า C ++ หรือไม่?
ไม่ แต่ VB และ C # มีคุณลักษณะที่เหมือนกัน
การใช้งานของพวกเขาค่อนข้างหลากหลาย ตัวอย่าง Java ทั่วไปตัวอย่างหนึ่ง@Override
ไม่มีผลกับโค้ด แต่คอมไพลเลอร์สามารถใช้เพื่อสร้างคำเตือน (หรือข้อผิดพลาด) ได้หากเมธอดที่ตกแต่งไม่ได้แทนที่เมธอดอื่นจริงๆ ในทำนองเดียวกันวิธีการอาจถูกทำเครื่องหมายว่าล้าสมัย
จากนั้นก็มีการสะท้อน เมื่อคุณแสดงประเภทของคลาสในรหัสของคุณคุณสามารถเข้าถึงแอตทริบิวต์และดำเนินการตามข้อมูลที่พบในโค้ดของคุณ ฉันไม่ทราบตัวอย่างใด ๆ ใน Java แต่ใน. NET สิ่งนี้ถูกใช้โดยคอมไพลเลอร์เพื่อสร้าง(de)ข้อมูลการทำให้เป็นอนุกรมสำหรับคลาสกำหนดโครงร่างหน่วยความจำของโครงสร้างและประกาศการนำเข้าฟังก์ชันจากไลบรารีเดิม (อื่น ๆ ) นอกจากนี้ยังควบคุมวิธีการทำงานของตัวออกแบบฟอร์ม IDE
/ แก้ไข: แอททริบิวต์ในคลาสเทียบได้กับอินเตอร์เฟสแท็ก (เช่นต่ออนุกรมได้ใน Java) อย่างไรก็ตามแนวทางการเข้ารหัส. NET บอกว่าอย่าใช้อินเทอร์เฟซแท็ก นอกจากนี้ยังทำงานในระดับชั้นเรียนเท่านั้นไม่ใช่ในระดับวิธีการ
Anders ให้ข้อมูลสรุปที่ดีและนี่คือตัวอย่างของคำอธิบายประกอบ JUnit
@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}
ที่นี่มี@Test
คำอธิบายประกอบจะบอก JUnit ว่าวิธีการคือการทดสอบที่ควรจะดำเนินการและผลที่คาดว่าจะถูกโยนflatfileMissing
IOException
ดังนั้นเมื่อคุณทำการทดสอบระบบจะเรียกวิธีนี้และการทดสอบจะผ่านหรือล้มเหลวขึ้นอยู่กับว่ามีการIOException
โยน
Java ยังมีเครื่องมือประมวลผลคำอธิบายประกอบ (apt) ที่ไม่เพียง แต่คุณสร้างคำอธิบายประกอบเท่านั้น แต่ยังตัดสินใจด้วยว่าคำอธิบายประกอบเหล่านี้ทำงานอย่างไรกับซอร์สโค้ด
นี่คือบทนำ
หากต้องการดูสิ่งดีๆบางอย่างที่คุณสามารถทำอะไรกับคำอธิบายประกอบให้ตรวจสอบคำอธิบายประกอบ JavaBean ของฉันและการประมวลผลคำอธิบายประกอบ
พวกเขายอดเยี่ยมสำหรับการสร้างโค้ดเพิ่มการตรวจสอบความถูกต้องพิเศษระหว่างการสร้างของคุณและฉันยังใช้มันสำหรับกรอบข้อความแสดงข้อผิดพลาด (ยังไม่ได้เผยแพร่ - ต้องเคลียร์กับหัวหน้า ... )
ตามความหมายตามตัวอักษรคำอธิบายประกอบจะเพิ่มบันทึกย่อให้กับองค์ประกอบ ในทำนองเดียวกันคำอธิบายประกอบ Java คือแท็กที่เราแทรกลงในซอร์สโค้ดเพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับโค้ด คำอธิบายประกอบ Java เชื่อมโยงข้อมูลกับองค์ประกอบโปรแกรมที่มีคำอธิบายประกอบ นอกเหนือจากคำอธิบายประกอบ Java โปรแกรม Java ยังมีเอกสารที่ไม่เป็นทางการจำนวนมากซึ่งโดยทั่วไปจะอยู่ในความคิดเห็นในไฟล์ซอร์สโค้ด แต่คำอธิบายประกอบ Java แตกต่างจากความคิดเห็นที่ใส่คำอธิบายประกอบองค์ประกอบของโปรแกรมโดยตรงโดยใช้ประเภทคำอธิบายประกอบเพื่ออธิบายรูปแบบของคำอธิบายประกอบ Java Annotations นำเสนอข้อมูลในรูปแบบมาตรฐานและมีโครงสร้างเพื่อให้สามารถใช้เครื่องมือประมวลผลได้อย่างสอดคล้องกัน
หากต้องการอ่านรายละเอียดมีบทช่วยสอนที่ดีเกี่ยวกับJava Annotations
คุณใช้คำอธิบายประกอบ @Override ของ Java เมื่อใดและเพราะเหตุใด ลิงก์นี้อ้างถึงคำถามว่าเมื่อใดควรใช้คำอธิบายประกอบแทนที่ (@override) .. ซึ่งอาจช่วยให้เข้าใจแนวคิดของคำอธิบายประกอบได้ดีขึ้นลองดู
คำอธิบายประกอบเมื่อพูดถึง EJB เรียกว่าการเลือกวิธีการเครื่องกลางโดยนัยมากกว่าวิธีการเครื่องกลางอย่างชัดเจนเมื่อคุณใช้คำอธิบายประกอบคุณกำลังปรับแต่งสิ่งที่คุณต้องการจาก API ตัวอย่างเช่นคุณต้องเรียกวิธีการทำธุรกรรมสำหรับการโอนเงินผ่านธนาคาร : โดยไม่ต้องใช้คำอธิบายประกอบ: รหัสจะเป็น
transfer(Account account1, Account account2, long amount)
{
// 1: Call middleware API to perform a security check
// 2: Call middleware API to start a transaction
// 3: Call middleware API to load rows from the database
// 4: Subtract the balance from one account, add to the other
// 5: Call middleware API to store rows in the database
// 6: Call middleware API to end the transaction
}
ในขณะที่ใช้คำอธิบายประกอบรหัสของคุณไม่มีการเรียก API ที่ยุ่งยากเพื่อใช้บริการเครื่องกลาง รหัสนี้สะอาดและเน้นที่ตรรกะทางธุรกิจ
transfer(Account account1, Account account2, long amount)
{
// 1: Subtract the balance from one account, add to the other
}