제이온

[Effective Java] รายการที่ 4: หากต้องการป้องกันการสร้างอินสแตนซ์ ให้ใช้คอนสตรัคเตอร์แบบ private

สร้าง: 2024-04-28

สร้าง: 2024-04-28 13:38

บางครั้ง การใช้คลาสที่มีเพียงเมธอดคงที่และฟิลด์คงที่ก็อาจมีประโยชน์


ตัวอย่างเช่น เราสามารถใช้คลาสยูทิลิตี้ เช่น java.lang.Math, java.util.Arrays ซึ่งรวบรวมเมธอดที่เกี่ยวข้องกับการคำนวณทางคณิตศาสตร์และอาร์เรย์ หรือ java.util.Collections ซึ่งรวบรวมเมธอดคงที่แบบ Factory ที่สร้างออบเจ็กต์ที่ใช้อินเทอร์เฟซบางอย่าง


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


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



ดังนั้น เพื่อป้องกันการสร้างอินสแตนซ์ของคลาสยูทิลิตี้ เราจึงต้องตั้งค่าตัวดัดแปลงการเข้าถึงของคอนสตรัคเตอร์เป็น private



ถ้าคอนสตรัคเตอร์มีตัวดัดแปลงการเข้าถึงเป็น private คลาสภายนอกจะไม่สามารถเข้าถึงได้ และถ้ามีการเรียกใช้คอนสตรัคเตอร์จากภายใน จะทำให้เกิดข้อยกเว้น


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


แหล่งที่มา

ความคิดเห็น0

สร้างเฟรมเวิร์กระดับ DI ด้วย Node.js แม้จะเป็นมือใหม่บทความนี้จะอธิบายวิธีการใช้การอัดฉีดการพึ่งพา (DI) ในการพัฒนาเซิร์ฟเวอร์ Node.js โดยใช้ฟังก์ชัน Reflect Metadata ของคอมไพเลอร์ TypeScript ในการใช้ DI และแนะนำไลบรารีที่เกี่ยวข้อง
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

November 8, 2024

รับค่าคงที่ด้วย genericบทความนี้จะแนะนำวิธีการส่งค่าคงที่ไปยัง generic ได้อย่างง่ายดายโดยใช้ keywords ใหม่ใน TypeScript 5.0 สามารถใช้ได้กับ array หรือ literal type และจะช่วยปรับปรุงการพัฒนา library และประสบการณ์ของผู้ใช้
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

October 30, 2024

การสร้างแบบจำลองข้อมูลเชิงแนวคิดการสร้างแบบจำลองข้อมูลเชิงแนวคิดเป็นกระบวนการที่ใช้ ERD ในการแสดงเอนทิตีและความสัมพันธ์ เพื่อเป็นพื้นฐานในการออกแบบฐานข้อมูล
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

April 8, 2024

[ผู้ที่ไม่ใช่สายงานนี้ สามารถเป็น Developer ได้ไหม] 17. Portfolio ของ Developer มือใหม่ ควรมีอะไรบ้าง?Portfolio ของ Developer มือใหม่ ควรเน้นการแสดงความสามารถในการสร้างฟังก์ชัน CRUD พื้นฐาน และการเชื่อมต่อกับ API ภายนอก
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

ยังคงใช้ไลบรารีเชิงฟังก์ชันอยู่หรือไม่แนะนำการเปลี่ยนแปลงของไลบรารีการเขียนโปรแกรมเชิงฟังก์ชันและการถือกำเนิดของ Effect Framework พร้อมทั้งกล่าวถึงความเป็นไปได้ที่จะตั้งมาตรฐานใหม่ในวงการ Node.js
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

July 30, 2024

ความแปรปรวนร่วมและความแปรปรวนตรงข้ามบทความนี้จะอธิบายแนวคิดเรื่องความแปรปรวนร่วมและความแปรปรวนตรงข้าม โดยใช้ตัวอย่าง Animal และ Dog เพื่ออธิบายความแปรปรวนร่วมและความแปรปรวนตรงข้าม และเน้นความจำเป็นของความแปรปรวนตรงข้ามเพื่อเพิ่มความยืดหยุ่นในการจัดการเหตุการณ์ ฯลฯ นอกจากนี้ยังกล่าวถึงความแ
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

November 1, 2024