ฉันจะอธิบายอย่างไรว่าคลาสนั้นไม่เปลี่ยนรูปใน Java?


14

เมื่อเร็ว ๆ นี้ฉันได้พบว่าวัตถุที่เปลี่ยนไม่ได้มีประโยชน์อย่างไรและเช่นถ้าคุณส่งองค์ประกอบไปยังตัวสร้างและคลาสของคุณควรจะไม่เปลี่ยนรูปคุณต้องคัดลอกองค์ประกอบเหล่านี้หากพวกเขาไม่เปลี่ยนรูปตัวเอง

สิ่งนี้ต้องการการตรวจสอบหรือความรู้มากมายเกี่ยวกับโครงการของฉันเพราะถ้าฉันมี

public A(B foo)

และBไม่ได้เปลี่ยนรูปฉันต้องคัดลอกA Bตอนนี้จินตนาการBดูเหมือนไม่เปลี่ยนรูป แต่ตัวเองมีคลาสที่ไม่แน่นอนในตัวสร้างและอื่น ๆ

มีมาตรฐานหรือแนวปฏิบัติที่ดีที่สุดสำหรับการจัดทำเอกสารหรือไม่หากคลาสไม่เปลี่ยนรูปแบบใน Java? ดูเหมือนว่าไม่มี@immutableคำหลักใน Javadoc

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


2
ประการแรกการคัดลอกเชิงป้องกันช่วยให้คุณสามารถหลีกเลี่ยงได้ ประการที่สองวิธีการบันทึกเป็นคลาส Javadoc
raptortech97

"วิธีจัดทำเอกสารเป็นคลาส Javadoc" มีวิธีมาตรฐานในการทำเช่นนี้หรือไม่? นี่จะเป็นคำตอบที่ยอมรับแล้ว
Aufziehvogel

@ raptortech97 หนึ่งในข้อดีที่สำคัญของคลาสที่ไม่เปลี่ยนรูปคือว่าไม่จำเป็นต้องคัดลอกเพื่อป้องกัน หากจะต้องมีการป้องกันการคัดลอกวัตถุที่ไม่เปลี่ยนรูปซึ่งถูกกล่าวหาว่าคุณกำลังทำผิด
itsbruce

1
@itsbruce เขากำลังพูดถึงการคัดลอกวัตถุที่ไม่แน่นอน นอกจากนี้ยังมีเหตุผลหนึ่งในการคัดลอกวัตถุที่ไม่เปลี่ยนรูปแบบ - สถานที่แคช นักสะสมขยะบางคนรักษาลำดับที่สัมพันธ์กันของวัตถุดังนั้นวัตถุที่จัดสรรเข้าด้วยกันจะอยู่ด้วยกัน
Doval

คุณถูก. ความผิดฉันเอง.
itsbruce

คำตอบ:


7

ดูเอกสารของStringชั้นเรียน (ตัวหนาเป็นสิ่งที่ฉันทำ):

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

อย่างที่คุณเห็นไม่มีการทำเครื่องหมายเฉพาะหรือเครื่องหมายอื่น ๆ อย่างไรก็ตามพวกเขาจะระบุใน JavaDoc อธิบายคลาสที่Stringชั้นแสดงถึงวัตถุคงที่และไม่เปลี่ยนรูป

ดังนั้นสมมติว่าคุณทำตามคำแนะนำที่ให้ไว้ในบทช่วยสอน Oracle นี้เพื่อสร้างคลาสที่ไม่เปลี่ยนรูปเพื่อให้แน่ใจว่ามีการบันทึกการเปลี่ยนแปลงไม่ได้ของคลาสคุณควรตรวจสอบให้แน่ใจว่าคุณพูดถึงมันใน JavaDoc อธิบายชั้นเรียน ทำ.

หากที่ยังคงไม่เหมาะกับสิ่งที่คุณต้องการคุณอาจจะดูที่วิธีการที่คุณสามารถสร้างแท็ก JavaDoc ที่กำหนดเองที่นี่


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