Methodenüberladung und Nullfehler in Java

In Java kommt es häufig vor, dass Methoden überladen werden. Unten finden Sie ein interessantes Java-Programm. 

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

Ausgabe :

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 

Der Grund, warum im obigen Szenario ein Fehler bei der Kompilierung auftritt, liegt darin, dass die Methodenargumente „Integer“ und „String“ in Java keine primitiven Datentypen sind. Das bedeutet, dass sie Nullwerte akzeptieren. Wenn wir einen Nullwert an Methode1 übergeben, ist der Compiler verwirrt, welche Methode er auswählen muss, da beide den Nullwert akzeptieren. Dieser Fehler bei der Kompilierung würde nicht auftreten, es sei denn, wir übergeben absichtlich einen Nullwert. Sehen Sie sich zum Beispiel das folgende Szenario an, das wir beim Codieren im Allgemeinen befolgen. 

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

Ausgabe :

fun(Integer )  

Wenn im obigen Szenario der Wert „arg“ aufgrund des Ergebnisses des Ausdrucks null ist, wird der Nullwert an Methode1 übergeben. Hier erhalten wir keinen Fehler bei der Kompilierung, da wir angeben, dass das Argument vom Typ „Integer“ ist. Daher wählt der Compiler die Methode 1 (Integer i) aus und führt den darin enthaltenen Code aus. Hinweis: Dieses Problem würde nicht bestehen bleiben, wenn die überschriebenen Methodenargumente vom primitiven Datentyp wären. Denn der Compiler wählt die am besten geeignete Methode aus und führt sie aus.