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