Metodes pārslodze un nulles kļūda Java

Java ir ļoti izplatīta metožu pārslodze. Zemāk ir interesanta 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  );      }   }   

Izvade:

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 

Iemesls, kāpēc iepriekš minētajā scenārijā tiek parādīta kompilēšanas laika kļūda, ir šeit metodes argumenti Vesels skaitlis un String nav primitīvi Java datu tipi. Tas nozīmē, ka viņi pieņem nulles vērtības. Kad metodei 1 nododam nulles vērtību, kompilators sajaucas, kura metode tam ir jāizvēlas, jo abas pieņem nulli. Šī kompilēšanas laika kļūda nenotiks, ja vien mēs ar nolūku nenododam nulles vērtību. Piemēram, skatiet tālāk redzamo scenāriju, kuru mēs parasti ievērojam kodēšanas laikā. 

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

Izvade:

fun(Integer )  

Iepriekš minētajā scenārijā, ja “arg” vērtība ir nulle izteiksmes rezultāta dēļ, nulles vērtība tiek nodota metodei1. Šeit mēs nesaņemsim kompilēšanas laika kļūdu, jo mēs norādām, ka argumenta tips ir Vesels skaitlis, tāpēc kompilators izvēlas metodi 1 (Vesels skaitlis i) un izpildīs tajā esošo kodu. Piezīme.: Šī problēma nepastāvēs, ja ignorētie metodes argumenti ir primitīva tipa dati. Jo kompilators izvēlēsies piemērotāko metodi un izpilda to.