जावा जेनरिक में 'और' और ',' में क्या अंतर है?


110

जेनरिक के बारे में जावा आधिकारिक ट्यूटोरियल को पढ़ते हुए, मैंने पाया कि आप इस तरह 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
@Doorknob आप मान रहे हैं कि ओपी एक कीबोर्ड और उसी कीबोर्ड का उपयोग कर रहा है जो आप उपयोग कर रहे हैं।
एमोरी

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

2
@ निकोलस पिकरिंग, सही है! मेरे लिए, यह कीबोर्ड के कारण गलत नहीं था, बल्कि मस्तिष्क के कारण था। जब आप लिखते हैं कि कौन सी कक्षा के क्रियान्वयन में बाधा डालती है, तो आप उन्हें अल्पविराम द्वारा अलग करते हैं।
एलिन सियोकेन

जवाबों:


169
<T extends MyClass & Serializable>

यह दावा करता है कि एकल प्रकार के पैरामीटर Tका विस्तार MyClassहोना चाहिए और होना चाहिए Serializable

<T extends MyClass , Serializable>

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.