ฉันเป็นแฟนตัวยงของการตรวจสอบประเภทคงที่ มันป้องกันคุณจากการทำผิดพลาดแบบนี้:
// java code
Adult a = new Adult();
a.setAge("Roger"); //static type checker would complain
a.setName(42); //and here too
แต่มันไม่ได้ป้องกันคุณจากการทำผิดพลาดแบบนี้:
Adult a = new Adult();
// obviously you've mixed up these fields, but type checker won't complain
a.setAge(150); // nobody's ever lived this old
a.setWeight(42); // a 42lb adult would have serious health issues
ปัญหามาเมื่อคุณใช้ชนิดเดียวกันเพื่อแสดงถึงข้อมูลประเภทต่าง ๆ อย่างเห็นได้ชัด ฉันคิดว่าวิธีแก้ปัญหาที่ดีในการขยายInteger
ชั้นเรียนเพียงเพื่อป้องกันข้อผิดพลาดทางตรรกะทางธุรกิจ แต่ไม่ได้เพิ่มฟังก์ชันการทำงาน ตัวอย่างเช่น:
class Age extends Integer{};
class Pounds extends Integer{};
class Adult{
...
public void setAge(Age age){..}
public void setWeight(Pounds pounds){...}
}
Adult a = new Adult();
a.setAge(new Age(42));
a.setWeight(new Pounds(150));
นี่ถือว่าเป็นการปฏิบัติที่ดีหรือไม่? หรือมีปัญหาทางวิศวกรรมที่ไม่คาดฝันเกิดขึ้นกับการออกแบบที่ จำกัด เช่นนี้หรือไม่?
new Age(...)
วัตถุของคุณคุณจะไม่สามารถกำหนดให้กับตัวแปรประเภทWeight
ในสถานที่อื่นได้อย่างไม่ถูกต้อง ช่วยลดจำนวนสถานที่ที่สามารถเกิดข้อผิดพลาดได้
a.SetAge( new Age(150) )
ยังคงรวบรวมหรือไม่