Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

जावा में Varargs में मेथड ओवरलोडिंग और अस्पष्टता

जावा में परिवर्तनीय तर्कों का उपयोग करते समय अस्पष्टताएं होती हैं। ऐसा इसलिए होता है क्योंकि दो विधियां निश्चित रूप से डेटा मानों द्वारा बुलाए जाने के लिए पर्याप्त मान्य हो सकती हैं। इसके कारण, कंपाइलर को यह नहीं पता होता है कि किस विधि को कॉल करना है।

उदाहरण

public class Demo {
   static void my_fun(double ... my_Val){
      System.out.print("fun(double ...): " + "Number of args: " + my_Val.length );
      for(double x : my_Val)
      System.out.print(x + " ");
      System.out.println();
   }
   static void my_fun(boolean ... my_Val){
      System.out.print("fun(boolean ...) " + "The number of arguments: " + my_Val.length);
      for(boolean x : my_Val)
      System.out.print(x + " ");
      System.out.println();
   }
   public static void main(String args[]){
      my_fun(11.56, 34.78, 99.09, 56.66);
      System.out.println("Function 1 has been successfully called");
      my_fun(true, false, true, false);
      System.out.println("Function 2 has been successfully called");
      my_fun();
      System.out.println("Function 3 has been successfully called");
   }
}

आउटपुट

Demo.java:23: error: reference to my_fun is ambiguous
my_fun();
^
both method my_fun(double...) in Demo and method my_fun(boolean...) in Demo match
1 error

डेमो नामक एक वर्ग 'my_fun' नामक एक फ़ंक्शन को परिभाषित करता है जो फ्लोटिंग पॉइंटवैल्यू की चर संख्या लेता है। मान 'फॉर' लूप का उपयोग करके कंसोल पर मुद्रित होते हैं। यह फ़ंक्शन अतिभारित है और पैरामीटर बूलियन मान हैं जो संख्या में भिन्न हैं। आउटपुट 'फॉर' लूप का उपयोग करके कंसोल पर प्रदर्शित होता है।

मुख्य फ़ंक्शन में, 'my_fun' को पहले फ़्लोटिंग ppoint मानों के साथ और फिर बूलियन मानों के साथ और फिर बिना किसी पैरामीटर के कहा जाता है। इसके परिणामस्वरूप जो अपवाद होता है, वह कंसोल पर प्रदर्शित होता है।


  1. जावा में विधि अधिभार v/s विधि ओवरराइडिंग

    मेथड ओवरलोडिंग एक प्रकार का कंपाइल-टाइम पॉलीमॉर्फिज्म है जबकि मेथड ओवरराइडिंग एक प्रकार का रनटाइम पॉलीमॉर्फिज्म है। विधि अधिभार कोड की पठनीयता को बढ़ाता है जबकि विधि अधिभावी उपवर्ग में विधि का विशिष्ट कार्यान्वयन प्रदान करता है ताकि सुपरक्लास में मौजूद विधि का स्थान ले सके। विधि ओवरलोडिंग एक वर्ग के

  1. जावा में मेथड ओवरलोडिंग और टाइप प्रमोशन

    विधि ओवरलोडिंग विभिन्न प्रकार के पैरामीटर पर समान क्रिया करने के लिए एक ही नाम के साथ कई विधियों को बनाने में मदद करता है। वेरिएबल समान प्रकार के होने की स्थिति में हम टाइप प्रमोशन का उपयोग कर सकते हैं। प्रकार का प्रचार स्वचालित रूप से निम्न श्रेणी मान को उच्च श्रेणी मान में बढ़ावा देता है। उदाहरण क

  1. जावा में विधि ओवरलोडिंग

    मेथड ओवरलोडिंग एक प्रकार का स्टैटिक पॉलीमॉर्फिज्म है। मेथड ओवरलोडिंग में, हम एक ही नाम के साथ लेकिन विभिन्न मापदंडों के साथ कई विधियों को परिभाषित कर सकते हैं। निम्नलिखित उदाहरण कार्यक्रम पर विचार करें। उदाहरण public class Tester {    public static void main(String args[]) {