में डालकर मैं समझने की कोशिश कर रहा हूं कि java.util.Properties को इस तरह क्यों लागू किया गया था। इसमें दो इंटरफेस हैं: getProperty/setProperty जो केवल स्ट्रिंग स्वीकार करता है, और डाल/प्राप्त करता है जो किसी ऑब्जेक्ट को मान के रूप में स्वीकार करता है। ये दो इंटरफेस ओवरलैपिंग प्रतीत होते हैं, इसलिए getProperty() का उपयोग करके पुट() के साथ जोड़ा गया स्ट्रिंग पुनर्प्राप्त किया जा सकता है।वस्तुओं को java.util.Properties
इस अजीब हाइब्रिड इंटरफ़ेस के साथ कुछ समस्याएं प्रतीत होती हैं। एक स्ट्रिंग प्रॉपर्टी को ओवरराइड करने वाली ऑब्जेक्ट को स्ट्रिंग मान को साफ़ करने का दुष्प्रभाव होता है, जो getProperty परिणाम के रूप में शून्य उत्पन्न करता है। एक पूर्णांक जोड़ना, या कुछ अन्य मान जिसमें एक साधारण स्ट्रिंग अनुवाद है, वास्तविक संपत्ति मान होने के रूप में गलत समझा जा सकता है (लेकिन एक संपत्ति के रूप में यह हमेशा शून्य है)।
मेरा प्रश्न है: क्या इसके लिए एक वास्तविक, व्यावहारिक कारण है? या क्या यह आधा बेक्ड कार्यान्वयन है जैसा मुझे संदेह है?
मैं इसे वापस नहीं कर सकता, लेकिन मुझे दृढ़ता से संदेह होगा कि समस्या पीछे की संगतता है। 'गुण'' हैशटेबल 'बढ़ाता है, जो जेनेरिक से पहले पुरानी कक्षा है; इसका मतलब है कि यदि आपके पास 'Properties' था, तो आप' Properties.put (जो भी हो, जो भी हो) कह सकते थे। जब जेनेरिक साथ आए, तो जावा लोग कोड को पीछे संगत रखना चाहते थे, जिसका अर्थ है कि यह 'हैशटेबल <ऑब्जेक्ट, ऑब्जेक्ट>' बढ़ाता है। – yshavit
'गुण'' हैशटेबल 'का उप-वर्ग है, जिसमें 'get' /' put' के ओवरराइड नहीं हैं, इसलिए व्यवहार। 'getProperty' /' setProperty' 'get' /' put' के टाइप किए गए संस्करण हैं। यह इतिहास का मामला है और छुपा नहीं है। –