logo

Sobrecarga de métodos y error nulo en Java

En Java es muy común sobrecargar métodos. A continuación se muestra un interesante programa 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);  } } 

Producción :



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

La razón por la que obtenemos un error de tiempo de compilación en el escenario anterior es que aquí los argumentos del método Integer y String no son tipos de datos primitivos en Java. Eso significa que aceptan valores nulos. Cuando pasamos un valor nulo al método1, el compilador se confunde sobre qué método debe seleccionar, ya que ambos aceptan el valor nulo. Este error en tiempo de compilación no ocurriría a menos que pasemos intencionalmente un valor nulo. Por ejemplo, vea el siguiente escenario que seguimos generalmente mientras codificamos. 

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

Producción :

fun(Integer ) 

En el escenario anterior, si el valor 'arg' es nulo debido al resultado de la expresión, entonces el valor nulo se pasa al método1. Aquí no obtendríamos un error de tiempo de compilación porque especificamos que el argumento es de tipo Integer, por lo tanto, el compilador selecciona el método1 (Integer i) y ejecutará el código dentro de él. Nota: Este problema no persistirá cuando los argumentos del método anulado sean de tipo de datos primitivos. Porque el compilador seleccionará el método más adecuado y lo ejecutará.