logo

Preobremenitev metode in ničelna napaka v Javi

V Javi je zelo pogosto preobremenitev metod. Spodaj je zanimiv program Java. 

Java
public class Test {  // Overloaded methods  public void fun(Integer i)  {  System.out.println("fun(Integer ) ");  }  public void fun(String name)  {  System.out.println("fun(String ) ");  }  // Driver code   public static void main(String [] args)  {  Test mv = new Test();  // This line causes error  mv.fun(null);  } } 

Izhod:



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

Razlog, zakaj v zgornjem scenariju dobimo napako časa prevajanja, je, da argumenti metode Celo število in Niz niso primitivni tipi podatkov v Javi. To pomeni, da sprejemajo ničelne vrednosti. Ko metodi1 posredujemo ničelno vrednost, se prevajalnik zmede, katero metodo mora izbrati, saj oba sprejemata ničelno vrednost. Ta napaka v času prevajanja se ne bi zgodila, razen če namenoma posredujemo ničelno vrednost. Oglejte si na primer spodnji scenarij, ki mu na splošno sledimo med kodiranjem. 

Java
public class Test {  // Overloaded methods  public void fun(Integer i)  {  System.out.println("fun(Integer ) ");  }  public void fun(String name)  {  System.out.println("fun(String ) ");  }  // Driver code  public static void main(String [] args)  {  Test mv = new Test();    Integer arg = null;  // No compiler error  mv.fun(arg);  } } 

Izhod:

fun(Integer ) 

Če je v zgornjem scenariju vrednost 'arg' ničelna zaradi rezultata izraza, se ničelna vrednost posreduje metodi1. Tukaj ne bi dobili napake v času prevajanja, ker podajamo, da je argument tipa Integer, zato prevajalnik izbere metodo1(Integer i) in bo izvedel kodo znotraj nje. Opomba: Ta težava ne bi obstajala, če so argumenti preglasene metode primitivni podatkovni tip. Ker bo prevajalnik izbral najprimernejšo metodo in jo izvedel.