निम्न उदाहरण कोड पर विचार करें:जावा अधिक भार: संदर्भ कॉल करने के लिए अस्पष्ट
public class TestClass {
public void doSth(String str, String l, Object... objects) {
System.out.println("A");
}
public void doSth(String str, Object... objects) {
System.out.println("B");
}
}
जब मैं अब new TestClass().doSth("foo", "bar")
फोन मैं अपेक्षित परिणाम A
मिलता है। लेकिन अगर मैं एक आदिम प्रकार के पैरामीटर l
chaging द्वारा पहली विधि की विधि हस्ताक्षर बदलने के लिए:
public class TestClass {
public void doSth(String str, long l, Object... objects) {
System.out.println("A");
}
public void doSth(String str, Object... objects) {
System.out.println("B");
}
}
new TestClass().doSth("foo", 2L)
बुला एक reference to call ambiguous
संकलन समय त्रुटि निकलेगा।
मैंने उस समय के बारे में कुछ समय के बारे में सोचा और this stackoverflow question से परामर्श लिया, लेकिन मुझे यह समझने में असमर्थ था कि ऐसा क्यों होता है। मेरी राय में doSth("foo", 2L)
doSth(String string, long l, Object... obj)
हस्ताक्षर के लिए अधिक विशिष्ट है और संकलक को इस निष्कर्ष पर भी आने की अनुमति देनी चाहिए।
जाहिर है प्राइमेटिव ऑब्जेक्ट्स भी हो सकते हैं? –
@blahfunk, हाँ, उन्हें – Andrew
लपेटा जा सकता है केवल एकमात्र स्पष्टीकरण जो दिमाग में आता है [Autoboxing] (https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html) है, लेकिन यह होना चाहिए एक रूपांतरण-चरण "आगे" विधि के आदिम संस्करण से दूर है। – Turing85