Preopterećenje metode i nulta pogreška u Javi

U Javi je vrlo uobičajeno preopteretiti metode. Ispod je zanimljiv Java program. 

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

Izlaz:

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 zašto dobivamo pogrešku vremena kompajliranja u gornjem scenariju ovdje su argumenti metode Integer i String koji nisu primitivni tipovi podataka u Javi. To znači da prihvaćaju nulte vrijednosti. Kada predamo null vrijednost metodi1, prevodilac se zbuni koju metodu mora odabrati jer obje prihvaćaju null. Ova pogreška vremena kompajliranja ne bi se dogodila osim ako namjerno ne prenesemo nultu vrijednost. Na primjer, pogledajte donji scenarij koji općenito slijedimo tijekom kodiranja. 

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

Izlaz:

fun(Integer )  

U gornjem scenariju ako je vrijednost 'arg' null zbog rezultata izraza tada se null vrijednost prosljeđuje metodi1. Ovdje ne bismo dobili pogrešku vremena kompajliranja jer specificiramo da je argument tipa Integer stoga prevoditelj odabire metodu1(Integer i) i izvršit će kod unutar nje. Napomena: Ovaj problem ne bi postojao kada su argumenti nadjačane metode primitivni tip podataka. Budući da će prevodilac odabrati najprikladniju metodu i izvršiti je.