2013-08-22 22 views
108

जेनिक्स के बारे में जावा आधिकारिक ट्यूटोरियल पढ़ने के दौरान, मैंने पाया कि आप 'और' ऑपरेटर (&) के साथ कक्षा और/या अधिक इंटरफेस का विस्तार करने के लिए प्रकार तर्क (इस मामले में T) को प्रतिबंधित कर सकते हैं:जावा जेनेरिक में '&' और ',' के बीच क्या अंतर है?

<T extends MyClass & Serializable> 

मैंने & को , के साथ बदल दिया (गलती से और अभी भी काम करता है, मामूली चेतावनी के साथ)।

<T extends MyClass & Serializable> 
<T extends MyClass , Serializable> // here is with comma 

और उदाहरण विधि:

static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) { 
    ArrayList<T> arr = new ArrayList<T>(); 

    for (T o : a) { 
     arr.add(o); // Correct 
    } 
    return arr; 
} 
+5

@ डोरोकनोब आप मानते हैं कि ओपी एक कीबोर्ड और उसी कीबोर्ड का उपयोग कर रहा है जिसका आप उपयोग कर रहे हैं। – emory

+3

@emory मुझे लगता है कि यह भी गलत दिशा है - त्रुटि उसकी उंगलियों में नहीं बल्कि उसके दिमाग में थी। इसी प्रकार जैसे कि आप जावा स्रोत फ़ाइल में 'आयात' के बजाय 'शामिल' का उपयोग करने का प्रयास करेंगे। आपने 'शामिल' को गलत टाइप किया है, क्योंकि आपके दिमाग ने आपको गलत चीज़ टाइप करने के लिए कहा है, जो विभिन्न कारणों से संभव है। –

+2

@ निकोलस पिकरिंग, सही है! मेरे लिए, यह कीबोर्ड की वजह से एक गलत टाइप नहीं था, लेकिन मस्तिष्क की वजह से। जब आप लिखते हैं कि कक्षा के कौन से इंटरफेस लागू होते हैं, तो आप उन्हें अल्पविराम से अलग करते हैं। –

उत्तर

166
<T extends MyClass & Serializable> 

यह दावा है कि एक प्रकार पैरामीटर TMyClass का विस्तार करने और चाहिए

मेरा प्रश्न है, इन दोनों के बीच कोई अंतर नहीं है Serializable होना चाहिए।

<T extends MyClass , Serializable> 

यह वाणी दो प्रकार पैरामीटर, एक बुलाया T (जो MyClass का विस्तार करना होगा) और एक Serializable कहा जाता है (जो java.io.Serializable छुपाता है - यह शायद क्या चेतावनी के बारे में किया गया है)।

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