Преоптерећење метода и нулта грешка у Јави

У Јави је врло уобичајено да се методе преоптерећују. Испод је занимљив Јава програм. 

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

Излаз :

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 

Разлог зашто добијамо грешку у времену компајлирања у горњем сценарију је овде аргументи метода Интегер и Стринг, оба нису примитивни типови података у Јави. То значи да прихватају нулте вредности. Када проследимо нулту вредност методи1, компајлер се збуни који метод мора да изабере пошто оба прихватају нулту вредност. Ова грешка у времену компајлирања се не би догодила осим ако намерно не проследимо нулту вредност. На пример, погледајте следећи сценарио који генерално пратимо током кодирања. 

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

Излаз :

fun(Integer )  

У горњем сценарију, ако је вредност 'арг' нулл због резултата израза, онда се нулл вредност прослеђује методи1. Овде не бисмо добили грешку у времену компајлирања јер наводимо да је аргумент типа Интегер, па компајлер бира метод1(Интегер и) и извршиће код унутар њега. Напомена: Овај проблем не би постојао када су аргументи надјачане методе примитивни тип података. Зато што ће компајлер изабрати најпогоднији метод и извршити га.