Overbelasting van methode en nulfout in Java

In Java is het heel gebruikelijk om methoden te overbelasten. Hieronder staat een interessant Java-programma. 

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

Uitgang:

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 

De reden waarom we in het bovenstaande scenario een compileerfout krijgen, is dat de methode-argumenten Integer en String beide geen primitieve gegevenstypen zijn in Java. Dat betekent dat ze nulwaarden accepteren. Wanneer we een nulwaarde doorgeven aan method1, raakt de compiler in de war welke methode hij moet selecteren, omdat beide de nul accepteren. Deze compileerfout zou niet optreden tenzij we opzettelijk een null-waarde doorgeven. Zie bijvoorbeeld het onderstaande scenario dat we in het algemeen volgen tijdens het coderen. 

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

Uitgang:

fun(Integer )  

Als in het bovenstaande scenario de waarde 'arg' nul is vanwege het resultaat van de expressie, wordt de nulwaarde doorgegeven aan methode1. Hier krijgen we geen compileerfout omdat we specificeren dat het argument van het type Integer is. Daarom selecteert de compiler de methode1 (Integer i) en zal de code daarin uitvoeren. Opmerking: dit probleem blijft niet bestaan ​​als de overschreven methodeargumenten een primitief gegevenstype zijn. Omdat de compiler de meest geschikte methode selecteert en deze uitvoert.