Menetelmän ylikuormitus ja nollavirhe Javassa

Javassa on hyvin yleistä ylikuormittaa menetelmiä. Alla on mielenkiintoinen Java-ohjelma. 

Java
   public     class   Test   {      // Overloaded methods      public     void     fun  (  Integer     i  )      {      System  .  out  .  println  (  &  quot  ;  fun  (  Integer     )     &  quot  ;);      }      public     void     fun  (  String     name  )      {      System  .  out  .  println  (  &  quot  ;  fun  (  String     )     &  quot  ;);      }      // Driver code       public     static     void     main  (  String     []     args  )      {      Test     mv     =     new     Test  ();      // This line causes error      mv  .  fun  (  null  );      }   }   

Lähtö:

22: error: reference to fun is ambiguous mv.fun(null); ^ both method fun(Integer) in Test and method fun(String) in Test match 1 error 

Syy siihen, miksi saamme käännösaikavirheen yllä olevassa skenaariossa, on tässä menetelmäargumentit Integer ja String eivät kumpikaan ole primitiivisiä tietotyyppejä Javassa. Tämä tarkoittaa, että he hyväksyvät nolla-arvot. Kun välitämme nolla-arvon metodille 1, kääntäjä hämmentää, mikä menetelmä sen on valittava, koska molemmat hyväksyvät nollan. Tätä käännösaikavirhettä ei tapahdu, ellemme tarkoituksella välitä nolla-arvoa. Katso esimerkiksi alla oleva skenaario, jota noudatamme yleisesti koodattaessa. 

Java
   public     class   Test   {      // Overloaded methods      public     void     fun  (  Integer     i  )      {      System  .  out  .  println  (  &  quot  ;  fun  (  Integer     )     &  quot  ;);      }      public     void     fun  (  String     name  )      {      System  .  out  .  println  (  &  quot  ;  fun  (  String     )     &  quot  ;);      }      // Driver code      public     static     void     main  (  String     []     args  )      {      Test     mv     =     new     Test  ();          Integer     arg     =     null  ;      // No compiler error      mv  .  fun  (  arg  );      }   }   

Lähtö:

fun(Integer )  

Yllä olevassa skenaariossa, jos arg-arvo on nolla lausekkeen tuloksen vuoksi, nolla-arvo välitetään menetelmälle 1. Tässä emme saa käännösaikavirhettä, koska määritämme argumentin tyyppiä Kokonaisluku, joten kääntäjä valitsee metodin 1 (Kokonaisluku i) ja suorittaa siinä olevan koodin. Huomautus: Tämä ongelma ei jatku, kun ohitetut menetelmäargumentit ovat primitiivisiä tietotyyppejä. Koska kääntäjä valitsee sopivimman menetelmän ja suorittaa sen.