logo

Overload del metodo ed errore nullo in Java

In Java è molto comune sovraccaricare i metodi. Di seguito è riportato un interessante programma Java. 

una classe può estendere più classi
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);  } } 

Produzione :



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

Il motivo per cui riceviamo un errore in fase di compilazione nello scenario precedente è che qui gli argomenti del metodo Integer e String non sono entrambi tipi di dati primitivi in ​​Java. Ciò significa che accettano valori nulli. Quando passiamo un valore nullo al metodo1 il compilatore si confonde su quale metodo deve selezionare poiché entrambi accettano il valore nullo. Questo errore in fase di compilazione non si verificherebbe a meno che non passassimo intenzionalmente un valore null. Ad esempio, vedere lo scenario seguente che seguiamo generalmente durante la codifica. 

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

Produzione :

fun(Integer ) 

Nello scenario precedente, se il valore "arg" è nullo a causa del risultato dell'espressione, il valore null viene passato al metodo1. Qui non otterremmo errori in fase di compilazione perché stiamo specificando che l'argomento è di tipo Integer quindi il compilatore seleziona il metodo1 (Integer i) ed eseguirà il codice al suo interno. Nota: questo problema non persiste quando gli argomenti del metodo sovrascritto sono di tipo dati primitivo. Perché il compilatore selezionerà il metodo più adatto e lo eseguirà.