मैं "से जावा कोड के इस टुकड़े है - एक शुरुआत गाइड - Schildt ', अध्याय 13:।जेनेरिक विधि मंगलाचरण
package com.chapter.thirteen;
public class GenericMethodDemo {
static <T extends Comparable<T>, V extends T> boolean arraysEqual(T[] x, V[] y){
if(x.length != y.length) return false;
for(int i = 0; i < x.length; i++)
if(!x[i].equals(y[i])) return false;
return true;
}
public static void main(String args[]){
Integer [] nums = { 1, 3, 3, 4, 6 };
Integer [] nums2 = { 1, 3, 3, 4, 6 };
Integer [] nums3 = { 1, 3, 3, 4, 6 };
Integer [] nums4 = { 1, 3, 3, 4, 6, 7};
Double [] dVals = {1.1, 2.2, 3.3, 4.4};
if(arraysEqual(nums, nums))
System.out.println("nums equal nums");
if(arraysEqual(nums, nums2))
System.out.println("nums equal nums2");
if(arraysEqual(nums, nums2))
System.out.println("nums equal nums2");
if(arraysEqual(nums, nums3))
System.out.println("nums equal nums3");
if(arraysEqual(nums, nums4))
System.out.println("nums equal nums4");
//Edit:Removed the comments from the below two lines.
if(arraysEqual(nums, dVals))
System.out.println("Nums equal dVals");
}
}
संकलन संदेश के साथ विफल रहता है - "Error:(39, 12) java: method arraysEqual in class com.chapter.thirteen.GenericMethodDemo cannot be applied to given types; required: T[],V[] found: java.lang.Integer[],java.lang.Double[] reason: inference variable T has incompatible bounds equality constraints: java.lang.Integer lower bounds: V,java.lang.Double,java.lang.Integer"
, जो उम्मीद है
हालांकि, जब मैं (के रूप में नीचे दिए गए कोड में दिखाया गया है) तुलनीय करने के लिए पैरामीटर जोड़ने, कोड संकलित करता है तथा सही परिणाम पैदा करता है।
package com.chapter.thirteen;
public class GenericMethodDemo {
static <T extends Comparable, V extends T> boolean arraysEqual(T[] x, V[] y){
if(x.length != y.length) return false;
for(int i = 0; i < x.length; i++)
if(!x[i].equals(y[i])) return false;
return true;
}
public static void main(String args[]){
Integer [] nums = { 1, 3, 3, 4, 6 };
Integer [] nums2 = { 1, 3, 3, 4, 6 };
Integer [] nums3 = { 1, 3, 3, 4, 6 };
Integer [] nums4 = { 1, 3, 3, 4, 6, 7};
Double [] dVals = {1.1, 2.2, 3.3, 4.4};
if(arraysEqual(nums, nums))
System.out.println("nums equal nums");
if(arraysEqual(nums, nums2))
System.out.println("nums equal nums2");
if(arraysEqual(nums, nums2))
System.out.println("nums equal nums2");
if(arraysEqual(nums, nums3))
System.out.println("nums equal nums3");
if(arraysEqual(nums, nums4))
System.out.println("nums equal nums4");
if(arraysEqual(nums, dVals))
System.out.println("Nums equal dVals");
}
}
याद किया
क्या कोई यह बता सकता है कि संकलन दूसरे उदाहरण में क्यों विफल नहीं होता है? मुझे उम्मीद थी कि संकलक टी की शिकायत करने के लिए तुलनात्मक रूप से विस्तारित है, वी दूसरे उदाहरण में टी बढ़ाता है?
क्या चल रहा है?
आपका पहला कोड भी संकलित करता है। आप किस जावा संस्करण का उपयोग कर रहे हैं? – Ruben
जब आप 'तुलनात्मक' से टाइप पैरामीटर को हटाते हैं, तो आप कच्चे प्रकार का उपयोग शुरू कर रहे हैं और कहानी पूरी तरह से अलग हो जाती है। कच्चे प्रकार केवल पूर्व-जावा -5 कोड के साथ संगतता के लिए मौजूद हैं और इन्हें नए संगतता में उपयोग नहीं किया जाना चाहिए, जिन्हें ऐसी संगतता की आवश्यकता नहीं है। कच्चे प्रकार के काम करते समय और कब नहीं, आपको समझने की कोशिश नहीं करनी चाहिए, आपको इसके बारे में भूल जाना चाहिए। –
हाय, मैं इंटेलिजे आईडीईए 14.1.5 सामुदायिक संस्करण पर जावा संस्करण 1.8.0_65 का उपयोग कर रहा हूं। धन्यवाद – theguyoverthere