Sobrecarga de métodos y error nulo en Java

En Java es muy común sobrecargar los 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 de tiempo de compilación no sucederá a menos que pasemos intencionalmente un valor nulo. Por ejemplo, vea el siguiente escenario que generalmente seguimos 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, el valor nulo se pasa al método1. Aquí no obtendríamos un error de tiempo de compilación porque estamos especificando que el argumento es de tipo Integer, por lo tanto, el compilador selecciona el método 1 (Integer i) y ejecutará el código dentro de eso. Nota: este problema no persistiría cuando los argumentos del método anulado sean de tipo de datos primitivo. Porque el compilador seleccionará el método más adecuado y lo ejecutará. Este artículo es una contribución de Nageswara Rao Maridu . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.orgo envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *