How is generic function implemented in java? -


मेरी समझ के अनुसार जावा में निम्न सामान्य कार्य:

  सार्वजनिक स्थिर & lt; T & gt; ; टी एफ (टी एक्स) {पूर्णांक [] arr = नया पूर्णांक [4]; टी रेट = (टी) arr [2]; रिटर्न रिट; }  

निम्न रूप से संकलित किया गया है (जैसा कि यह असीम है):

  सार्वजनिक स्थिर वस्तु f (ऑब्जेक्ट x) {पूर्णांक [] arr = new पूर्णांक [4]; ऑब्जेक्ट रेट = (ऑब्जेक्ट) एआरआर [2]; रिटर्न रिट; }  

हालांकि, जब मैं निम्नलिखित कथन चलाता हूं, तो संकलक पूर्णांक प्रकार के लिए रिटर्न मान को समझने में सक्षम होता है। कंपाइलर इसे कैसे समझता है?

  पूर्णांक I = f (नया पूर्णांक (4));  

क्या उपर्युक्त बयान के कार्य के लिए निम्नलिखित के रूप में कार्य किया जाना चाहिए?

  सार्वजनिक स्थिर & lt; टी पूर्णांक पूर्णांक & gt; टी एफ (टी एक्स) {पूर्णांक [] arr = नया पूर्णांक [4]; टी रेट = (टी) arr [2]; रिटर्न रिट; }  

जेनरिक्स टाइप एरर का उपयोग करते हैं मूल रूप से इसका मतलब है कि जेनेरिक कुछ भी अन्तर्निहित डाटों से अधिक नहीं है, जब आप ऐसा करते हैं:

  सूची & lt; integer & gt; ...  

यह एक सामान्य सूची से अलग नहीं है और इसमें पूर्णांक या कुछ भी वास्तव में हो सकता है आप सिर्फ जावा को get () को पूर्णांक पर डालने के लिए कह रहे हैं (और अन्य चीजें)। प्रकार बस क्रमशः (अधिकतर) पर नहीं रखा जाता है।

एरेज़ अलग हैं एरेएं हैं जिन्हें सहकारिता कहा जाता है इसका मतलब है कि उनके प्रकार रनटाइम पर बनाए रखा जाता है तो आप ऐसा कर सकते हैं:

  सूची & lt; पूर्णांक & gt; List1 = नया अर्रेलिस्ट & lt; पूर्णांक & gt; (); List2 = (सूची & lt; स्ट्रिंग & gt;) list1; list2.add ( "हैलो");  

जो बिल्कुल कानूनी है और संकलन और चलाएगा। लेकिन:

  पूर्णांक [] arr1 = नया पूर्णांक [10]; स्ट्रिंग [] arr2 = (स्ट्रिंग []) arr1; // कंपाइलर त्रुटि  

लेकिन इससे भी अधिक सूक्ष्म हो जाता है।

  पूर्णांक [] arr1 = नया पूर्णांक [10]; वस्तु [] arr2 = (वस्तु []) arr1; Arr2 [5] = "हैलो"; // रनटाइम त्रुटि!  

अपने फ़ंक्शन के रूप में जब आप लिखते हैं:

<प्री> सार्वजनिक स्थिर & lt; T & gt; टी एफ (टी एक्स) {पूर्णांक [] arr = नया पूर्णांक [4]; टी रेट = (टी) arr [2]; रिटर्न रिट; }

आप क्यूम्बलर को यह कह रहे हैं कि तर्क कोड से तर्क कोड और वापसी का प्रकार होने के लिए T प्राप्त करें। इसलिए जब आप पूर्णांक में वापसी करते हैं, तो वापसी का प्रकार पूर्णांक होता है। जब आप कॉल करते हैं:

  पूर्णांक i = f (नया पूर्णांक (4));  

संकलक बस आपके निर्देशों का पालन कर रहा है फ़ंक्शंस लेता है और संकलित रूप में एक ऑब्जेक्ट वापस करता है, लेकिन यह सिर्फ यह करता है:

  पूर्णांक I = (पूर्णांक) एफ (नया पूर्णांक (4));  

परोक्ष रूप से।

बस ऊपर सूची उदाहरण की तरह आपके पास f () वापसी नहीं है

आप जिस चीज़ को पसंद करते हैं, उसके बजाय पैरामीटिज्ड टाइप के आधार पर आपको जो भी पसंद है।

Comments

Popular posts from this blog

sql - dynamically varied number of conditions in the 'where' statement using LINQ -

asp.net mvc - Dynamically Generated Ajax.BeginForm -

Debug on symbian -