Metodeoverbelastning og nullfeil i Java

I Java er det veldig vanlig å overbelaste metoder. Nedenfor er et interessant 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  );      }   }   

Utgang:

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 

Grunnen til at vi får kompileringstidsfeil i scenariet ovenfor er her metodeargumentene Integer og String begge er ikke primitive datatyper i Java. Det betyr at de godtar nullverdier. Når vi sender en nullverdi til metode1, blir kompilatoren forvirret hvilken metode den må velge ettersom begge godtar null. Denne kompileringstidsfeilen ville ikke skje med mindre vi med vilje sender nullverdi. Se for eksempel scenariet nedenfor som vi følger generelt mens vi koder. 

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

Utgang:

fun(Integer )  

I scenariet ovenfor, hvis 'arg'-verdien er null på grunn av resultatet av uttrykket, sendes nullverdien til metode1. Her vil vi ikke få kompileringstidsfeil fordi vi spesifiserer at argumentet er av typen Integer, derfor velger kompilatoren metoden1(Integer i) og vil kjøre koden i det. Merk: Dette problemet vil ikke vedvare når de overstyrte metodeargumentene er primitive datatyper. Fordi kompilatoren vil velge den mest passende metoden og kjøre den.