प्रकार के लिए विधि अस्पष्ट है, मैं यह समझने की कोशिश कर रहा हूं कि जावा में ओवरलोडिंग कैसे काम करती है और विभिन्न ओवरलोडिंग नियमों को समझने की कोशिश कर रहा है जो जावा में चौड़ा, ऑटोबॉक्सिंग और वैरगास के मामले में लागू होते हैं। मैं समझने के लिए इस परिदृश्य में हो रहा है नहीं पा रहा हूँ:विधि
package package1;
public class JustAClass {
public static void add(int a, long b) {
System.out.println("all primitives");
}
//public static void add(Integer a, long b) {
// System.out.println("Wraper int, primitive long");
//}
public static void add(int a, Long b) {
System.out.println("Primitive int, Wrapper long");
}
public static void add(Integer a, Long b){
System.out.println("All wrapper");
}
public static void main(String[] args) {
int a = 10;
Integer b = 10;
long c = 9;
Long d = 9l;
add(a,c);
add(a,d);
add(b,c);
add(b,d);
}
}
इस बिंदु पर, मैं add
विधि The method is ambiguous for the type Error
कह के तीसरे मंगलाचरण पर एक संकलन त्रुटि मिलती है। ऐसा क्यों है? यह निर्धारित करने के लिए नियम क्या हैं कि विधि का कौन सा आवेषण कार्य करेगा? निम्नलिखित मामले में वास्तव में क्या हो रहा है? मुझे लगता है कि fourth
ओवरलोडेड ऐड विधि काम करनी चाहिए। कृपया इसके पीछे की अवधारणा को समझने में मेरी सहायता करें।
नियम जावा भाषा विनिर्देशों में हैं, और वे बहुत लंबे और जटिल हैं। उन्हें याद रखना मूल रूप से असंभव है, और यही कारण है कि आपको कभी भी ऊपर की तरह कोड लिखना नहीं चाहिए, क्योंकि आप बग पेश करने के लिए लगभग निश्चित हो सकते हैं। मैं समझने की आपकी इच्छा का सम्मान करता हूं, लेकिन ऐसा करने के लिए, आपको जेएलएस पढ़ना चाहिए: http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.12 –
@JBNizet : मुझे लगता है कि सवाल पूरी तरह से कानूनी है। आप इसे तोड़कर विनिर्देश सीख सकते हैं और समझ सकते हैं कि यह क्यों टूटता है, फिर इसे फिर से न करें। – kiltek