पैरामीट्रिक प्रकारों की एक महत्वपूर्ण विशेषता पॉलीमॉर्फिक एल्गोरिदम लिखने की क्षमता है, अर्थात एल्गोरिदम जो डेटा पैरामीटर पर संचालित होते हैं, भले ही इसके पैरामीटर मान की परवाह किए बिना Arrays.sort()
।
जेनरिक के साथ, यह वाइल्डकार्ड प्रकारों के साथ किया जाता है:
<E extends Comparable<E>> void sort(E[]);
वास्तव में उपयोगी होने के लिए, वाइल्डकार्ड प्रकारों को वाइल्डकार्ड कैप्चर की आवश्यकता होती है, और इसके लिए एक प्रकार के पैरामीटर की धारणा की आवश्यकता होती है। समय सारणी में से कोई भी जावा में शामिल नहीं किया गया था, और संदर्भ प्रकार के सहसंयोजक सरणियों ने पॉलीमॉर्फिक एल्गोरिदम को अनुमति देने के लिए बहुत सरल तरीके की अनुमति दी:
void sort(Comparable[]);
हालाँकि, उस सादगी ने स्टेटिक टाइप सिस्टम में एक खामी खोली:
String[] strings = {"hello"};
Object[] objects = strings;
objects[0] = 1; // throws ArrayStoreException
संदर्भ प्रकार की एक सरणी तक हर लेखन पहुंच के रनटाइम चेक की आवश्यकता होती है।
संक्षेप में, जेनेरिक द्वारा सन्निहित नया दृष्टिकोण टाइप सिस्टम को और अधिक जटिल बनाता है, लेकिन यह भी अधिक सांख्यिकीय रूप से सुरक्षित है, जबकि पुराने दृष्टिकोण सरल था, और कम सांख्यिकीय रूप से सुरक्षित था। भाषा के डिजाइनरों ने सरल दृष्टिकोण का विकल्प चुना, प्रकार प्रणाली में एक छोटी खामियों को बंद करने की तुलना में अधिक महत्वपूर्ण चीजें हैं जो शायद ही कभी समस्याओं का कारण बनती हैं। बाद में, जब जावा स्थापित किया गया था, और दबाने की जरूरतों का ध्यान रखा गया था, तो उनके पास यह अधिकार था कि वे इसे जेनेरिक के लिए सही कर सकें (लेकिन इसे एरेज़ के लिए बदलने से मौजूदा जावा प्रोग्राम टूट जाएंगे)।