के साथ संदिग्ध ओवरलोडेड जावा विधियां मैं समझने की कोशिश कर रहा हूं कि जावा कॉल फ़ंक्शन कॉल में अस्पष्टताओं से कैसे निपटता है। निम्नलिखित कोड में, method
पर कॉल संदिग्ध है, लेकिन method2
नहीं है !!!जेनेरिक और varargs
मुझे लगता है कि दोनों संदिग्ध हैं, लेकिन जब मैं method
पर कॉल पर टिप्पणी करता हूं तो यह संकलित क्यों होता है? method2
क्यों संदिग्ध नहीं है?
public class A {
public static <K> List<K> method(final K arg, final Object... otherArgs) {
System.out.println("I'm in one");
return new ArrayList<K>();
}
public static <K> List<K> method(final Object... otherArgs) {
System.out.println("I'm in two");
return new ArrayList<K>();
}
public static <K, V> Map<K, V> method2(final K k0, final V v0, final Object... keysAndValues) {
System.out.println("I'm in one");
return new HashMap<K,V>();
}
public static <K, V> Map<K, V> method2(final Object... keysAndValues) {
System.out.println("I'm in two");
return new HashMap<K,V>();
}
public static void main(String[] args) {
Map<String, Integer> c = A.method2("ACD", new Integer(4), "DFAD");
//List<Integer> d = A.method(1, "2", 3 );
}
}
संपादित करें: इस टिप्पणी में आया: IDEs का एक नंबर दोनों की रिपोर्ट के रूप में अस्पष्ट - इंटेलीजे और Netbeans अब तक। हालांकि, यह कमांड लाइन/मेवेन से ठीक है।
अच्छा प्रश्न ... – Jivings
शायद यह संकलन समय में वृद्धि होगी अगर जावा अप्रयुक्त तरीकों – Joelmob
@Joelmob मुझे लगता है सवाल यह है कि के लिए जाँच क्यों करता है 'method2' संकलन जब यह बस के रूप में हो रहा है 'विधि' के रूप में संदिग्ध। – Jivings