logo

Metodeoverbelastning og nullfeil i Java

I Java er det veldig vanlig å overbelaste metoder. Nedenfor er et interessant Java-program. 

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

Utgang:

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

Grunnen til at vi får kompileringstidsfeil i scenariet ovenfor er her metodeargumentene Integer og String begge er ikke primitive datatyper i Java. Det betyr at de godtar nullverdier. Når vi sender en nullverdi til metode1, blir kompilatoren forvirret hvilken metode den må velge ettersom begge godtar null. Denne kompileringstidsfeilen ville ikke skje med mindre vi med vilje sender nullverdi. Se for eksempel scenariet nedenfor som vi følger generelt mens vi koder. 



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

Utgang:

fun(Integer ) 

I scenariet ovenfor, hvis 'arg'-verdien er null på grunn av resultatet av uttrykket, sendes nullverdien til metode1. Her vil vi ikke få kompileringstidsfeil fordi vi spesifiserer at argumentet er av typen Integer, derfor velger kompilatoren metoden1(Integer i) og vil kjøre koden i det. Merk: Dette problemet vil ikke vedvare når de overstyrte metodeargumentene er primitive datatyper. Fordi kompilatoren vil velge den mest passende metoden og kjøre den.