मैंने हाल ही में मानक संग्रह प्रकारों के गतिशील रूप से टाइपएफ़ दृश्य बनाने के लिए Collection.checkedMap
कार्यों के परिवार के लिए जावाडोक में ठोकर खाई। यह मानते हुए कि वे अपेक्षाकृत सामान्य प्रोग्रामर त्रुटि का निदान करने वाले संग्रहों के शीर्ष पर सुरक्षा की एक और परत जोड़ते हैं, मुझे लगता है कि वे अधिक लोकप्रिय होंगे। कुछ कारणों से, हालांकि, मैंने बड़ी जावा परियोजनाओं में काम किया है, मैंने उन्हें एक बार उपयोग नहीं देखा है।क्यों संग्रह नहीं हैं .checkedMap और दोस्तों ने अधिक सामान्य रूप से उपयोग किया?
मेरा प्रश्न यह है: क्या कोई विशेष कारण है कि जावा प्रोग्रामर इन चेक किए गए रैपरों का अधिक बार उपयोग नहीं करते हैं? या क्या यह उनके अस्तित्व के ज्ञान की कमी/कमी की कमी है?
संपादित करें: मेरे प्रश्न को स्पष्ट करने के लिए, संग्रह के सामान्य संस्करणों में अभी भी प्रकार-असुरक्षित कार्य शामिल हैं। Map
का containsKey
, containsValue
, remove
, और get
सभी उदाहरण के लिए Object
पर काम करते हैं। मेरा मुख्य सवाल यह है कि, इस प्रकार की असुरक्षितता को देखते हुए, अधिकतर लोग रनटाइम प्रकार के उल्लंघनों का निदान करने के लिए चेक किए गए कार्यान्वयन का उपयोग क्यों नहीं करते हैं।
मुख्य कारण यह है कि ऐसा लगता है कि इन कंटेनरों को रखना एक अच्छा विचार हो सकता है, हालांकि, मानचित्र के .put() जैसी चीजों के लिए है, जो कि के बजाए ऑब्जेक्ट लेता है (उदाहरण के लिए, मानचित्र)। यह वास्तव में गलत तरीके से किसी वस्तु को किसी मानचित्र में जोड़ने के लिए जेनेरिकों के दुरुपयोग की तरह प्रतीत नहीं होता है; यह एक प्रोग्रामर त्रुटि है। –
templatetypedef
@templatetypedef: मुझे यकीन नहीं है कि आपका क्या मतलब है। मानचित्र का 'put'' put (K, V) 'के रूप में निर्दिष्ट किया गया है। यदि आप जेनेरिक का उपयोग कर रहे हैं तो आप किसी भी पुराने ऑब्जेक्ट को मानचित्र में नहीं डाल सकते हैं। –
@ मार्क पीटर्स- मेरी गलती; मेरा मतलब था 'put', जो' के' के बजाय 'ऑब्जेक्ट' लेता है। 'निकालें' वही तरीका है, जैसा कि 'शामिल है' और 'युक्त वैल्यू' है। – templatetypedef