मैं स्थैतिक प्रकार की जाँच का बहुत बड़ा प्रशंसक हूँ। यह आपको इस तरह बेवकूफ बनाने से रोकता है:
// 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) )
अभी भी संकलन नहीं होगा ?