मैंने इस स्निपेट पर ठोकर खाई:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
यह एक संकलन त्रुटि के परिणामस्वरूप होगा:
त्रुटि: (15, 9) जावा: प्रिंटसुम का संदर्भ अस्पष्ट है दोनों विधि प्रिंटसम (int, double) ParamTest में और पद्धति PrintSum (लंबा, लंबा) ParamTest मैच में
यह कैसा अस्पष्ट है? क्या इस मामले में केवल दूसरे पैरामीटर को बढ़ावा नहीं दिया जाना चाहिए क्योंकि पहला पैरामीटर पहले से ही एक इंट है? इस मामले में पहले परम को बढ़ावा देने की आवश्यकता नहीं है?
यदि मैं किसी अन्य विधि को जोड़ने के लिए कोड को अपडेट करता हूं तो संकलन सफल होता है:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
मुझे स्पष्ट करने के लिए विस्तार करें। नीचे दिए गए कोड में अस्पष्टता है:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
फिर नीचे दिए गए इस कोड से भी अस्पष्टता आती है:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
हालांकि यह अस्पष्टता में परिणाम नहीं करता है:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, double b) {
System.out.println("In longDBL " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Error:(15, 9) java: reference to printSum is ambiguous both method printSum(int,double) in ParamTest and method printSum(long,long) in ParamTest match
- यह वह विधि नहीं है जो अस्पष्ट है, यह उस पद्धति के लिए कॉल है जो अस्पष्ट है।