เหตุใดจาวาใช้คำอธิบายประกอบ @Override แทนที่จะเป็นตัวดัดแปลง


19

อะไรคือแรงจูงใจที่ทำให้จาวาใช้@Overrideคำอธิบายประกอบแทนที่จะสร้างoverrideตัวดัดแปลงใหม่?

@Override
public String toString() {
   return "";
}

เมื่อเทียบกับ

public override String toString() {
   return "";
}

2
นั่นคือภายหลัง
Tulains Córdova

คำตอบ:


21

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

ในภาษาที่เพิ่มเครื่องหมายแทนที่จากวันแรกมันมักจะเป็นคำหลัก (ตัวอย่างคือ Kotlin และ Scala) ใน Java มันเป็นเรื่องของการอยู่ข้างหลังเข้ากันได้กับรุ่น Java ที่เก่ากว่าซึ่งไม่มีเครื่องหมายแทนที่ใด ๆ


ดูเหมือนจะไม่สอดคล้องกันว่าการแทนที่เป็นหมายเหตุประกอบเมื่อมีการเปลี่ยนแปลงที่นำคำหลักใหม่มาใช้ ตัวอย่างเช่นตัวแก้ไข "ค่าเริ่มต้น" สำหรับวิธีการอินเทอร์เฟซ
jwa

6
@jwa ไม่จริง: defaultเป็นคำหลักที่สงวนไว้แล้ว (ใช้ในคำสั่งสวิตช์) - พวกเขาเพิ่งเพิ่มการใช้ใหม่สำหรับมัน นอกจากนี้ยังมีคำหลักบางคำที่ไม่ได้ทำอะไรเลยในตอนนี้ แต่สงวนไว้สำหรับการใช้งานในอนาคต (const, goto) - ดูJLS .93.9
Michał Kosmulski

3
"ตัวอย่าง Kotlin และ Java" ดูเหมือนว่าพิมพ์ผิดที่นี่คุณหมายถึงการเขียนเช่น Scala แทนที่จะเป็น Java ใช่ไหม
ริ้น

6
แม้ว่าจะเป็นความจริงที่ว่าการเพิ่มคำหลักทั่วโลกจะทำให้เนื้อหาต่าง ๆ แต่ก็อาจถูกเพิ่มเป็นคำหลักเชิงบริบทโดยไม่ต้องทำลายรหัส สมมติว่าสิ่งนี้ไม่ได้ทำเพราะจะแยกความซับซ้อนเล็กน้อยและกลไกการเพิ่มความคิดเห็นนั้นดีพอ
jk

1
@ MichałKosmulski: ฉันจำได้ว่าenumคำหลักที่ถูกเพิ่มเข้ามาจะทำลายรหัสที่เก่ากว่า คำค้นหาเพิ่มเติมแบ่งได้ที่นี่: stackoverflow.com/questions/16506411
Allon Guralnek

13

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

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

เช่นนี้ทำให้รู้สึกว่าเป็นคำอธิบายประกอบที่สมบูรณ์แบบ


+1 ทำให้รู้สึกว่าคล้ายกับการปิดใช้งานคำเตือนผ่านคำอธิบายประกอบซึ่งเป็นไปได้ที่จะเปิดใช้งานคำเตือน / ข้อผิดพลาดเพิ่มเติมผ่านทางคำอธิบายประกอบ
ฮัลค์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.