2012-07-07 26 views
16

मुझे आश्चर्य है कि क्यों सामान्य तरीकों जो लौट कुछ भी नहीं void हैं (या हो सकता है) इस तरह की घोषणा की:वापसी जावा जेनेरिक तरीके का प्रकार

public static <E> void printArray(E[] inputArray) { 
    // Display array elements    
    for (E element : inputArray){   
     System.out.printf("%s ", element); 
    } 
    System.out.println(); 
    } 

यह <E> की तरह लगता है लौटे वस्तु के प्रकार है, लेकिन विधि वास्तव में कुछ भी नहीं देता है। तो इस मामले में विशेष रूप से और जेनेरिक तरीकों में आम तौर पर <E> का वास्तविक अर्थ क्या है?

उत्तर

66

यह सवाल मेरे पुराने नोटों की एक सूट द्वारा प्रतिस्थापित किया जा सकता है। मुझे आशा है कि इस उदाहरण में मदद करता है:

enter image description here enter image description here

+7

आप यहाँ एक वास्तविक अच्छा काम किया है, +1 – CloudyMarble

+0

कि सुनने के लिए खुश! धन्यवाद। @twomore – Jops

+1

महान उत्तर + 1, यह उल्लेख करने लायक हो सकता है कि आपकी पहली विधि में आप रिटर्न टाइप टी के लिए शून्य (अपरकेस 'वी') का उपयोग कर सकते हैं ... हालांकि 'y' को शून्य मान – Rhubarb

3

यह लौटा ऑब्जेक्ट का प्रकार नहीं है। यह इंगित करता है कि E, विधि हस्ताक्षर में, एक सामान्य प्रकार है और ठोस प्रकार नहीं है। इसके बिना, संकलक विधि के तर्क के लिए E नामक कक्षा की तलाश करेगा।

7

<E> सामान्य प्रकार पैरामीटर घोषणा है। इसका मतलब है "इस विधि में एक प्रकार का पैरामीटर है, जिसे E कहा जाता है, जो कि किसी भी प्रकार का हो सकता है"।

यह वापसी प्रकार नहीं है - के बाद विधि पैरामीटर घोषणा के ठीक पहले, पैरामीटर घोषणा के बाद आता है। तो आपके प्रश्न में printArray विधि का वापसी प्रकार अभी भी void है।

विधि घोषणाओं के बारे में अधिक जानकारी के लिए section 8.4 of the JLS देखें।

2

< ई> को औपचारिक प्रकार पैरामीटर कहा जाता है। यह विधि का रिटर्न प्रकार नहीं है। यह मूल रूप से कहता है कि विधि विभिन्न प्रकारों (ई [] इनपुटएरे) के पैरामीटर सरणी के रूप में स्वीकार कर सकती है।

1

वास्तविक प्रकार के प्लेसहोल्डर के रूप में उपयोग किया जाता है जो इस समारोह को कॉल करते समय जनरल फ़ंक्शन को पारित किया जाएगा।

लगता पूर्णांक

संबंधित मुद्दे