2015-10-28 9 views
6

संकलित नहीं करता है मैंने निम्नलिखित जेनेरिक क्लास को परिभाषित किया है, लेकिन जब मैं क्लास ऑब्जेक्ट पर इसका उपयोग करता हूं तो यह संकलित नहीं होता है। निर्माता अन्य वस्तु स्वीकार नहीं करेगाडायमंड जावा 7

class Pair<T,V> { 

    T one; 
    V two; 


    public Pair(T one, V two) { 
     this.one = one; 
     this.two = two; 
    } 


} 
public static void main(String[] args) { 

    String hamza = "Hamza"; 
    Integer soufiane = 0; 

    Pair<Object,Object> pairOne = new Pair<>(hamza, soufiane); 
    Pair<Object,Object> pairTwo = new Pair<Object, Object>(soufiane, hamza); 

} 

त्रुटि संदेश:

incompatible types: Pair<String,Integer> cannot be converted to Pair<Object,Object> 

पहले एक क्यों संकलित नहीं किया था और दूसरा संकलन?

संपादित करें: यह जावा 8

+0

यह बहुत दुर्लभ है कि कुछ संकलित नहीं होता है और संकलक आपको नहीं बताता है कि यह संकलित नहीं होता है। – Tom

+1

मैंने वहां त्रुटि संदेश शामिल किया था! यह हीरा नोटेशन है और इसे कम से कम मेरे ज्ञान के लिए संकलित करना चाहिए। मुझे टेम्पलेट पैरामीटर को शामिल करने के लिए मजबूर क्यों किया गया है जो मुझे समझ में नहीं आता है। –

+3

खैर, जेनेरिक प्रकार पॉलिमॉर्फ नहीं हैं, इसलिए 'जोड़ी <स्ट्रिंग, इंटीजर>' को 'जोड़ी <ऑब्जेक्ट, ऑब्जेक्ट>' को असाइन करना काम नहीं करता है और जावा 7 सोचता है कि यह 'जोड़ी <स्ट्रिंग, इंटीजर>' होना चाहिए क्योंकि आप ने कहा कि पारित तर्क इस प्रकार बताएंगे। दूसरी तरफ जावा 8 सही जेनेरिक प्रकार "ढूंढने" के साथ थोड़ा बेहतर है। – Tom

उत्तर

3

आपका कोड पर संकलित असफल क्योंकि जावा 7 संकलक उचित अनुमानित प्रकार नहीं मिल सकता है; दूसरी ओर जावा 8 संकलित और ठीक काम करेगा। (Tl; डॉ: जावा 7 ठीक से, सभी हीरे के साथ काम करता है नहीं है यह जावा में सुधार किया गया था 8)

JEP 101: Generalized Target-Type Inference

निर्बाध रूप समर्थन करने के लिए विधि टाइप अनुमान के दायरे का विस्तार (i) अनुमान विधि संदर्भ में और (ii) जंजीर कॉल में अनुमान।

मतलब जावा 8 हीरा ऑपरेटर का उपयोग करके आपके कॉल के प्रकार को निर्धारित करने में सक्षम होगा।

संपादित करें: ऐसा लगता है कि किसी ने मुझे thread में इस प्रतिक्रिया में हराया और इसे मुझसे अधिक स्पष्ट रूप से समझाया; तो देखो!