คำอธิบายประกอบ Java


114

จุดประสงค์ของคำอธิบายประกอบใน Java คืออะไร? ฉันมีความคิดที่คลุมเครือเกี่ยวกับพวกเขาในระหว่างความคิดเห็นและรหัสจริง มีผลต่อโปรแกรมในขณะรันหรือไม่

ประเพณีของพวกเขาคืออะไร?

เป็นเอกลักษณ์ของ Java หรือไม่? เทียบเท่า C ++ หรือไม่?


9
คุณสามารถทำสิ่งที่ชั่วร้ายได้ด้วยคำอธิบายประกอบ ตัวอย่างเช่นหากคุณรู้จัก Spring Framework และคำอธิบายประกอบ @Transactional ซึ่งเริ่มต้นธุรกรรมก่อนการเรียกใช้เมธอดและการย้อนกลับเมื่อมีข้อยกเว้น / ข้อผิดพลาดและตกลงในธุรกรรมที่ประสบความสำเร็จ สนับสนุนหลักการ SOC โดยสิ้นเชิง (การแยกข้อกังวล) สะอาดมาก ! กฎ Java! :-)

1
ดูเหมือนคำถาม 3 ข้อสำหรับฉัน ประการที่สองนั้นกว้างเกินไป
Raedwald

คำอธิบายประกอบทั้งหมดตามไวยากรณ์ดูเหมือนอินเทอร์เฟซ ดังนั้นคอมไพเลอร์หรือ JVM รู้จุดประสงค์ได้อย่างไร? สมมติว่าถ้าเราใช้ @ Override -> ทำการตรวจสอบว่าวิธีการลบล้างอย่างถูกต้องหรือไม่ @ Transactional ตามที่อธิบายไว้ข้างต้นจะดำเนินการเกี่ยวกับธุรกรรม สำหรับคำอธิบายประกอบทั้งหมดนี้เราจะหานิยาม / ตรรกะได้ที่ไหน?
Paramesh Korrakuti

คำตอบ:


80

คำอธิบายประกอบส่วนใหญ่จะใช้โดยรหัสที่ตรวจสอบโค้ดอื่น ๆ มักใช้สำหรับการปรับเปลี่ยน (เช่นการตกแต่งหรือการตัด) คลาสที่มีอยู่ในขณะรันไทม์เพื่อเปลี่ยนพฤติกรรม เฟรมเวิร์กเช่นJUnitและHibernateใช้คำอธิบายประกอบเพื่อลดจำนวนโค้ดที่คุณต้องเขียนเองเพื่อใช้เฟรมเวิร์ก

Oracle มีคำอธิบายที่ดีเกี่ยวกับแนวคิดและความหมายใน Javaบนไซต์ของพวกเขา


17

นอกจากนี้ยังเป็นเอกลักษณ์เฉพาะของ Java มีเทียบเท่า C ++ หรือไม่?

ไม่ แต่ VB และ C # มีคุณลักษณะที่เหมือนกัน

การใช้งานของพวกเขาค่อนข้างหลากหลาย ตัวอย่าง Java ทั่วไปตัวอย่างหนึ่ง@Overrideไม่มีผลกับโค้ด แต่คอมไพลเลอร์สามารถใช้เพื่อสร้างคำเตือน (หรือข้อผิดพลาด) ได้หากเมธอดที่ตกแต่งไม่ได้แทนที่เมธอดอื่นจริงๆ ในทำนองเดียวกันวิธีการอาจถูกทำเครื่องหมายว่าล้าสมัย

จากนั้นก็มีการสะท้อน เมื่อคุณแสดงประเภทของคลาสในรหัสของคุณคุณสามารถเข้าถึงแอตทริบิวต์และดำเนินการตามข้อมูลที่พบในโค้ดของคุณ ฉันไม่ทราบตัวอย่างใด ๆ ใน Java แต่ใน. NET สิ่งนี้ถูกใช้โดยคอมไพลเลอร์เพื่อสร้าง(de)ข้อมูลการทำให้เป็นอนุกรมสำหรับคลาสกำหนดโครงร่างหน่วยความจำของโครงสร้างและประกาศการนำเข้าฟังก์ชันจากไลบรารีเดิม (อื่น ๆ ) นอกจากนี้ยังควบคุมวิธีการทำงานของตัวออกแบบฟอร์ม IDE

/ แก้ไข: แอททริบิวต์ในคลาสเทียบได้กับอินเตอร์เฟสแท็ก (เช่นต่ออนุกรมได้ใน Java) อย่างไรก็ตามแนวทางการเข้ารหัส. NET บอกว่าอย่าใช้อินเทอร์เฟซแท็ก นอกจากนี้ยังทำงานในระดับชั้นเรียนเท่านั้นไม่ใช่ในระดับวิธีการ


13

Anders ให้ข้อมูลสรุปที่ดีและนี่คือตัวอย่างของคำอธิบายประกอบ JUnit

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

ที่นี่มี@Testคำอธิบายประกอบจะบอก JUnit ว่าวิธีการคือการทดสอบที่ควรจะดำเนินการและผลที่คาดว่าจะถูกโยนflatfileMissing IOExceptionดังนั้นเมื่อคุณทำการทดสอบระบบจะเรียกวิธีนี้และการทดสอบจะผ่านหรือล้มเหลวขึ้นอยู่กับว่ามีการIOExceptionโยน


7

Java ยังมีเครื่องมือประมวลผลคำอธิบายประกอบ (apt) ที่ไม่เพียง แต่คุณสร้างคำอธิบายประกอบเท่านั้น แต่ยังตัดสินใจด้วยว่าคำอธิบายประกอบเหล่านี้ทำงานอย่างไรกับซอร์สโค้ด

นี่คือบทนำ


4

หากต้องการดูสิ่งดีๆบางอย่างที่คุณสามารถทำอะไรกับคำอธิบายประกอบให้ตรวจสอบคำอธิบายประกอบ JavaBean ของฉันและการประมวลผลคำอธิบายประกอบ

พวกเขายอดเยี่ยมสำหรับการสร้างโค้ดเพิ่มการตรวจสอบความถูกต้องพิเศษระหว่างการสร้างของคุณและฉันยังใช้มันสำหรับกรอบข้อความแสดงข้อผิดพลาด (ยังไม่ได้เผยแพร่ - ต้องเคลียร์กับหัวหน้า ... )


1

ตามความหมายตามตัวอักษรคำอธิบายประกอบจะเพิ่มบันทึกย่อให้กับองค์ประกอบ ในทำนองเดียวกันคำอธิบายประกอบ Java คือแท็กที่เราแทรกลงในซอร์สโค้ดเพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับโค้ด คำอธิบายประกอบ Java เชื่อมโยงข้อมูลกับองค์ประกอบโปรแกรมที่มีคำอธิบายประกอบ นอกเหนือจากคำอธิบายประกอบ Java โปรแกรม Java ยังมีเอกสารที่ไม่เป็นทางการจำนวนมากซึ่งโดยทั่วไปจะอยู่ในความคิดเห็นในไฟล์ซอร์สโค้ด แต่คำอธิบายประกอบ Java แตกต่างจากความคิดเห็นที่ใส่คำอธิบายประกอบองค์ประกอบของโปรแกรมโดยตรงโดยใช้ประเภทคำอธิบายประกอบเพื่ออธิบายรูปแบบของคำอธิบายประกอบ Java Annotations นำเสนอข้อมูลในรูปแบบมาตรฐานและมีโครงสร้างเพื่อให้สามารถใช้เครื่องมือประมวลผลได้อย่างสอดคล้องกัน

หากต้องการอ่านรายละเอียดมีบทช่วยสอนที่ดีเกี่ยวกับJava Annotations


0

คุณใช้คำอธิบายประกอบ @Override ของ Java เมื่อใดและเพราะเหตุใด ลิงก์นี้อ้างถึงคำถามว่าเมื่อใดควรใช้คำอธิบายประกอบแทนที่ (@override) .. ซึ่งอาจช่วยให้เข้าใจแนวคิดของคำอธิบายประกอบได้ดีขึ้นลองดู


0

คำอธิบายประกอบเมื่อพูดถึง 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
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.