Java'da yöntem aşırı yüklemesi ve boş hata

Java'da yöntemlerin aşırı yüklenmesi çok yaygındır. Aşağıda ilginç bir Java programı bulunmaktadır. 

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

Çıkış :

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 

Yukarıdaki senaryoda derleme zamanı hatası almamızın nedeni burada Integer ve String yöntem argümanlarının her ikisinin de Java'daki ilkel veri türleri olmamasıdır. Bu, boş değerleri kabul ettikleri anlamına gelir. Yöntem1'e boş bir değer ilettiğimizde, her ikisi de boş değeri kabul ettiğinden derleyicinin hangi yöntemi seçmesi gerektiği konusunda kafası karışır. Bu derleme zamanı hatası, kasıtlı olarak boş değer iletmediğimiz sürece meydana gelmez. Örneğin genellikle kodlama yaparken takip ettiğimiz aşağıdaki senaryoya bakın. 

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

Çıkış :

fun(Integer )  

Yukarıdaki senaryoda, ifadenin sonucundan dolayı 'arg' değeri null ise, bu durumda null değer yöntem1'e iletilir. Burada derleme zamanı hatası almıyoruz çünkü argümanın Tamsayı türünde olduğunu belirtiyoruz, dolayısıyla derleyici yöntem1'i (Tamsayı i) seçer ve içindeki kodu çalıştırır. Not: Geçersiz kılınan yöntem bağımsız değişkenleri ilkel veri türü olduğunda bu sorun devam etmez. Çünkü derleyici en uygun metodu seçip çalıştıracaktır.