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 ( & 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 ); } }
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 ( & 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 ); } }
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.