Surcharge de méthode et erreur nulle en Java

En Java, il est très courant de surcharger les méthodes. Vous trouverez ci-dessous un programme Java intéressant. 

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

Sortir :

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 raison pour laquelle nous obtenons une erreur de compilation dans le scénario ci-dessus est que les arguments de méthode Integer et String ne sont pas tous deux des types de données primitifs en Java. Cela signifie qu'ils acceptent les valeurs nulles. Lorsque nous transmettons une valeur nulle à la méthode 1, le compilateur ne sait pas quelle méthode il doit sélectionner car les deux acceptent la valeur nulle. Cette erreur de compilation ne se produirait pas à moins que nous transmettions intentionnellement une valeur nulle. Par exemple, consultez le scénario ci-dessous que nous suivons généralement lors du codage. 

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

Sortir :

fun(Integer )  

Dans le scénario ci-dessus, si la valeur « arg » est nulle en raison du résultat de l'expression, la valeur nulle est transmise à la méthode1. Ici, nous n'obtiendrons pas d'erreur de compilation car nous spécifions que l'argument est de type Integer, le compilateur sélectionne donc la méthode 1 (Integer i) et exécutera le code à l'intérieur. Remarque : Ce problème ne persiste pas lorsque les arguments de méthode remplacés sont du type de données primitif. Parce que le compilateur sélectionnera la méthode la plus appropriée et l’exécutera.