Преоптерећење метода и нулта грешка у Јави
У Јави је врло уобичајено да се методе преоптерећују. Испод је занимљив Јава програм.
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 ); } }
Излаз :
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
Разлог зашто добијамо грешку у времену компајлирања у горњем сценарију је овде аргументи метода Интегер и Стринг, оба нису примитивни типови података у Јави. То значи да прихватају нулте вредности. Када проследимо нулту вредност методи1, компајлер се збуни који метод мора да изабере пошто оба прихватају нулту вредност. Ова грешка у времену компајлирања се не би догодила осим ако намерно не проследимо нулту вредност. На пример, погледајте следећи сценарио који генерално пратимо током кодирања.
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 ); } }
Излаз :
fun(Integer )
У горњем сценарију, ако је вредност 'арг' нулл због резултата израза, онда се нулл вредност прослеђује методи1. Овде не бисмо добили грешку у времену компајлирања јер наводимо да је аргумент типа Интегер, па компајлер бира метод1(Интегер и) и извршиће код унутар њега. Напомена: Овај проблем не би постојао када су аргументи надјачане методе примитивни тип података. Зато што ће компајлер изабрати најпогоднији метод и извршити га.