यह मेरे पिछले प्रश्न का अनुवर्ती है लेकिन चूंकि पिछला धागा लंबा था, इसलिए मैंने लगभग एक ही विषय से संबंधित एक और धागा शुरू करने का फैसला किया।जावा जेनरिक: जेनेरिक विधियों का उपयोग करके प्रकार कैप्चर और उत्पन्न अनुमान के बारे में प्रश्न
public class GenericMethodInference {
static <T> void test1(T t1, T t2) {}
static <T> void test3(T t1, List <T> t2) {}
static <T> void test4(List <T> t1, List <T> t2) {}
public static void main(String [] args) {
List <Object> c = new LinkedList<Object>();
List <? extends Object> d = new ArrayList<Integer>();
List e = new ArrayList<Integer>();
test1("Hello", new Integer(1)); // ok clause (1)
GenericMethodInference.<Object>test1("Hello", new Integer(1)); // ok clause (2)
test3("Hello", c); // ok clause (3)
test4(d,d) // clause (4) Error due to different type capture generated
}
नोट: यदि आप प्रत्येक खंड पर अपने कर्सर ले जाते हैं, आप अनुमान उत्पन्न होती है और ग्रहण पर प्रदर्शित किया जा रहा देखेंगे:
एक। खंड (1) < का उत्पादन करेगा? ऑब्जेक्ट> test1 < बढ़ाता है? ऑब्जेक्ट बढ़ाता है,? ऑब्जेक्ट>
बी बढ़ाता है। क्लॉज (2) वास्तव में वास्तविक प्रकार पैरामीटर
सी में परिभाषित किया गया है। खण्ड (3) < वस्तु> test3 < वस्तु, सूची < वस्तु >>
सवालों का उत्पादन करेगा:
- क्यों खंड (1) < वस्तु का उत्पादन नहीं किया>? चूंकि < ऑब्जेक्ट> क्लॉज (2) में दिखाए गए अनुसार काम करता है, < क्यों? ऑब्जेक्ट> इसके बजाय उत्पादन का विस्तार करता है?
- क्यों खंड (3) < ऑब्जेक्ट> < के बजाय ऑब्जेक्ट का उत्पादन? ऑब्जेक्ट बढ़ाता है>?
- चूंकि खंड (4) एक ही चर का उपयोग करता है, क्यों 2 अलग-अलग प्रकार के कैप्चर उत्पन्न होते हैं, इसलिए पैरामीटर का उपयोग समान चर डी का होता है?
"यदि आप प्रत्येक कर्सर पर अपना कर्सर ले जाते हैं" - जो आईडीई कृपया? (अद्यतन: उस संपादन के लिए धन्यवाद) –
ग्रहण, वह कहता है;) –
क्लॉज 4 क्या है? –