यह जावा के जेनरिक में प्रमुख छेद में से एक है, सरणियों हैं covariant , जिसका अर्थ है कि प्रकार की एक सरणी Foo[]
के एक उपवर्ग है Object[]
और ParentOfFoo[]
। इसके विपरीत List<Foo>
जिसमें यह व्यवहार नहीं है।
यह तब महत्वपूर्ण था जब जावा में जेनरिक (जावा 5 तक) नहीं था क्योंकि अन्यथा, जेनेरिक सॉर्टिंग फ़ंक्शन जैसा कुछ असंभव था।
हालाँकि, यह इस मुश्किल समस्या है कि arrays पता है कि वे किस प्रकार रनटाइम पर हैं । हालांकि जावा में जेनेरिक प्रकार के क्षरण पर आधारित है। ये दो चीजें बिल्कुल ठीक नहीं होती हैं और यही हमारी समस्या है।
तो यह लंबी और छोटी है, जावा 1 में, सहसंयोजक सरणियों ने आंशिक रूप से उस छेद को भर दिया जो जेनरिक की कमी थी। हालांकि जब उन्होंने इस छेद को ठीक से भरने की कोशिश की, तो बैकवर्ड संगतता का मतलब था कि सरणियों को लागू करना बहुत असंभव था।
वास्तव में, जिस व्यक्ति ने वास्तव में जेनरिक के लिए रूपरेखा तैयार की थी, मार्टिन ओडस्की ने एक साक्षात्कार के दौरान यहां इस बारे में बात की कि उन्होंने स्काला क्यों बनाया। (यदि आप स्काला के इतिहास में रुचि रखते हैं तो बहुत ही आकर्षक)