निम्नलिखित प्रोग्राम अपवाद क्यों फेंकता है?एससीजेपी प्रश्न: जावा-विधि var-args के साथ ओवरलोडिंग। तर्क क्या है?
public class MainClass{
public static void main(String[] argv){
callMethod(2);
}
public static void callMethod(Integer... i){
System.out.println("Wrapper");
}
public static void callMethod(int... i){
System.out.println("Primitive");
}
}
विधि callMethod (पूर्णांक []) प्रकार MainClass के लिए अस्पष्ट
ठीक है, मैं देख सकता है कि दो किसी भी विधि का काम करेंगे (अगर अन्य टिप्पणी की गई है), लेकिन मुझे यह भी पता है कि क्या होता है यदि कोई आदिम विधि के इनपुट के प्रकार से बिल्कुल मेल नहीं खाता है तो क्या होता है।
पहली चीज जो कि कोशिश की जाती है वह आदिम को चौड़ा करना है।
public static void callMethod(long i){
System.out.println("long");
}
कोड प्रिंट होगा लंबे
दूसरी बात आदिम बॉक्स करने के लिए है: तो, अगर वहाँ एक तिहाई तरीका था। तो अगर एक इंटीजर लेने का कोई तरीका था, तो वह एक होगा।
तीसरी प्राथमिकता var-args है।
उपर्युक्त प्राथमिकता के आधार पर, मैं उम्मीद करता हूं कि दूसरा ईमानदारी मामला होगा। मैं उम्मीद करता हूं कि int को इंटीजर में लपेटा जाए और (इंटीजर ...) का आह्वान किया जाएगा। लेकिन निश्चित रूप से ऐसा नहीं होता है। इसके बजाय, अपवाद फेंक दिया जाता है।
क्या कोई यह देखता है और समझा सकता है कि इस उदाहरण में प्राथमिकता क्यों लागू नहीं होती है?
चीयर्स!
मैंने सोचा कि यह तीन दृष्टिकोणों की कोशिश करता है और पहला "अनावश्यक" होने का प्रयास किया जाएगा। यद्यपि विधि लेती है (इंटीजर ... i), मुझे उम्मीद है कि एक इंटीजर में मुक्केबाजी उस विधि को "अयोग्य" बनाती है। लेकिन, जैसा कि आप कहते हैं, ऐसा लगता है कि बाद में "var-arg-ization" को भी ध्यान में रखा जाता है। चीयर्स! –