Sobrecàrrega de mètodes i error nul a Java

A Java és molt comú sobrecarregar mètodes. A continuació es mostra un programa Java interessant. 

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

Sortida:

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 

La raó per la qual obtenim un error de temps de compilació en l'escenari anterior és aquí els arguments del mètode Integer i String no són tipus de dades primitius a Java. Això vol dir que accepten valors nuls. Quan passem un valor nul al mètode1, el compilador es confon sobre quin mètode ha de seleccionar, ja que tots dos accepten el valor nul. Aquest error de temps de compilació no es produiria tret que passem intencionadament un valor nul. Per exemple, vegeu l'escenari següent que seguim generalment durant la codificació. 

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

Sortida:

fun(Integer )  

En l'escenari anterior, si el valor "arg" és nul a causa del resultat de l'expressió, el valor nul es passa al mètode 1. Aquí no obtindríem un error de temps de compilació perquè estem especificant que l'argument és de tipus Integer, per tant, el compilador selecciona el mètode 1 (Enter i) i executarà el codi dins d'aquest. Nota: aquest problema no persistiria quan els arguments del mètode anul·lat siguin de tipus de dades primitius. Perquè el compilador seleccionarà el mètode més adequat i l'executarà.