Preobremenitev metode in ničelna napaka v Javi

V Javi je zelo pogosto preobremenitev metod. Spodaj je zanimiv program Java. 

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  );      }   }   

Izhod:

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 

Razlog, zakaj v zgornjem scenariju dobimo napako časa prevajanja, je, da argumenti metode Celo število in Niz niso primitivni tipi podatkov v Javi. To pomeni, da sprejemajo ničelne vrednosti. Ko metodi1 posredujemo ničelno vrednost, se prevajalnik zmede, katero metodo mora izbrati, saj oba sprejemata ničelno vrednost. Ta napaka v času prevajanja se ne bi zgodila, razen če namenoma posredujemo ničelno vrednost. Oglejte si na primer spodnji scenarij, ki mu na splošno sledimo med kodiranjem. 

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  );      }   }   

Izhod:

fun(Integer )  

Če je v zgornjem scenariju vrednost 'arg' ničelna zaradi rezultata izraza, se ničelna vrednost posreduje metodi1. Tukaj ne bi dobili napake v času prevajanja, ker podajamo, da je argument tipa Integer, zato prevajalnik izbere metodo1(Integer i) in bo izvedel kodo znotraj nje. Opomba: Ta težava ne bi obstajala, če so argumenti preglasene metode primitivni podatkovni tip. Ker bo prevajalnik izbral najprimernejšo metodo in jo izvedel.