2012-05-20 15 views
8

जावा एसई 6 में प्रोपेरीज़ क्लास में setProperty(String key, String value) नामक एक विधि है, जो Object देता है। इसके अलावा, पिछले Object इस कुंजी के लिए संग्रहीत, या NULL यदि कोई मौजूद नहीं है। setProperty(String key, String value) के बाद से केवल String मूल्य के रूप में ले सकते हैं, तो यह विधि String क्यों नहीं लौटाती है?जावा में सेटप्रोपर्टी ऑब्जेक्ट वापस क्यों करता है?

+1

यदि आप जावाडोक देखते हैं तो आपको पता चलेगा कि यह आपके द्वारा निर्धारित मूल्य लौटाता है। –

+1

क्योंकि यह एक बुरी तरह छिपी हुई हैश मैप है? –

+0

यह स्टीप्रोपर्टी 1.2 से आसपास है: http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#setProperty(java.lang.String, java.lang.String) – Nivas

उत्तर

14

दुर्भाग्यवश कक्षा java.util.Properties जेनिक्स से कई साल पहले जावा 1.0 में पेश की गई थी। PropertiesHashtable फैलाता है जो किसी भी प्रकार का डेटा स्टोर कर सकता है। इस उदाहरण setProperty में

Properties props = new Properties(); 
props.put("key", new Object()); // use Hashtable's put method 
props.setProperty("key", "value"); // use Proerties' setProperty method 

पिछले मान इस प्रविष्टि में जमा हो जाती है, यानी Object लौटना चाहिए: तो, आप निम्न कर सकते हैं। लेकिन यह String नहीं है! ClassCastException से बचने के लिए जेडीके रचनाकारों को setProperty() को विधि के रूप में परिभाषित करना था जो Object लौटाता है।

बीटीडब्ल्यू अब भी कक्षा गुण Map<Object, Object>Map<String, String> के बजाय पिछड़ा संगतता के लिए लागू करता है।

13

क्योंकि संपत्ति हैशटेबल को विस्तारित करके शुरुआत से गलत तरीके से गलत थी, जो कुछ भी स्टोर कर सकती है। इस प्रकार डिज़ाइन ने लिस्कोव प्रतिस्थापन सिद्धांत का सम्मान नहीं किया: आधार वर्ग जो भी कर सकता है, सबक्लस करने में सक्षम होना चाहिए।

चूंकि गुण हैशटेबल को बढ़ाता है, इसलिए आप वास्तव में किसी भी प्रकार के ऑब्जेक्ट को स्टोर कर सकते हैं।

संबंधित मुद्दे