पैरामीट्रिक संस्करण का उपयोग करके देता है
- फ़ंक्शन के उपयोगकर्ताओं को अधिक जानकारी
- आपके द्वारा लिखे जाने वाले कार्यक्रमों की संख्या में कमी (मुफ्त बग जाँच)
एक यादृच्छिक उदाहरण के रूप में, मान लें कि हमारे पास एक विधि है जो एक द्विघात समीकरण की जड़ों की गणना करती है
int solve(int a, int b, int c) {
// My 7th grade math teacher is laughing somewhere
}
और फिर आप चाहते हैं कि यह अन्य प्रकार की संख्याओं पर काम करे, इसके अलावा चीजों की तरह int
। आप कुछ ऐसा लिख सकते हैं
Num solve(Num a, Num b, Num c){
...
}
मुद्दा यह है कि यह वह नहीं है जो आप इसे चाहते हैं। इसे कहते हैं
मुझे कोई भी 3 चीजें दें जो संख्या की तरह हैं (जरूरी नहीं कि उसी तरह से) और मैं आपको कुछ प्रकार की संख्या वापस दूंगा
हम ऐसा कुछ नहीं कर सकते int sol = solve(a, b, c)
अगर a
, b
और हम कर c
रहे हैं int
क्योंकि हम नहीं जानते कि विधि int
अंत में वापस लौटने वाली है ! यह कुछ अजीब नृत्य के साथ डाउनकास्टिंग और प्रार्थना की ओर जाता है अगर हम समाधान को बड़े अभिव्यक्ति में उपयोग करना चाहते हैं।
फ़ंक्शन के अंदर, कोई व्यक्ति हमें एक फ़्लोट, एक बिगिंट और डिग्री सौंप सकता है और हमें उन्हें एक साथ जोड़ना और गुणा करना होगा। हम इसे वैधानिक रूप से अस्वीकार करना चाहते हैं क्योंकि इन 3 वर्गों के बीच संचालन अस्पष्ट होने वाला है। डिग्री 360 मॉड हैं, इसलिए यह ऐसा नहीं होगा जो a.plus(b) = b.plus(a)
और इसी तरह की उल्लंघनाएं उत्पन्न होंगी।
अगर हम उप-प्रकार के साथ पैरामीट्रिक बहुरूपता का उपयोग करते हैं तो हम इस सब पर शासन कर सकते हैं क्योंकि हमारा प्रकार वास्तव में कहता है कि हमारा क्या मतलब है
<T : Num> T solve(T a, T b, T c)
या शब्दों में "यदि आप मुझे कुछ प्रकार देते हैं जो एक संख्या है, तो मैं उन गुणांकों के साथ समीकरणों को हल कर सकता हूं"।
यह कई अन्य स्थानों पर भी आता है। उदाहरण के लिए एक और अच्छा स्रोत कार्य करता है जो अमूर्त कंटेनर, आला किसी प्रकार का अधिक कर रहे हैं reverse
, sort
, map
, आदि