Metodeoverbelastning og nul-fejl i Java

I Java er det meget almindeligt at 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  );      }   }   

Output:

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 

Grunden til at vi får kompileringstidsfejl i ovenstående scenarie er her metodeargumenterne Integer og String begge er ikke primitive datatyper i Java. Det betyder, at de accepterer nulværdier. Når vi sender en nulværdi til metode1, bliver compileren forvirret, hvilken metode den skal vælge, da begge accepterer nul. Denne kompileringstidsfejl ville ikke ske, medmindre vi med vilje sender null-værdien. Se for eksempel nedenstående scenarie, som vi generelt følger under kodning. 

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

Output:

fun(Integer )  

I ovenstående scenarie, hvis 'arg'-værdien er null på grund af resultatet af udtrykket, overføres null-værdien til metode1. Her ville vi ikke få kompileringstidsfejl, fordi vi specificerer, at argumentet er af typen Integer, derfor vælger compileren metoden1(Integer i) og vil udføre koden inde i det. Bemærk: Dette problem vil ikke fortsætte, når de tilsidesatte metodeargumenter er primitive datatyper. Fordi compileren vil vælge den mest egnede metode og udføre den.