Sobrecarga de método e erro nulo em Java
Em Java é muito comum sobrecarregar métodos. Abaixo está um programa Java interessante.
Java public class Test { // Overloaded methods public void fun ( Integer i ) { System . out . println ( & quot ; fun ( Integer ) & quot ;); } public void fun ( String name ) { System . out . println ( & quot ; fun ( String ) & quot ;); } // Driver code public static void main ( String [] args ) { Test mv = new Test (); // This line causes error mv . fun ( null ); } }
Saída :
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
A razão pela qual obtemos um erro de tempo de compilação no cenário acima é que aqui os argumentos do método Integer e String não são tipos de dados primitivos em Java. Isso significa que eles aceitam valores nulos. Quando passamos um valor nulo para o método1, o compilador fica confuso sobre qual método deve selecionar, pois ambos estão aceitando o nulo. Este erro de tempo de compilação não aconteceria a menos que passássemos intencionalmente o valor nulo. Por exemplo, veja o cenário abaixo que geralmente seguimos durante a codificação.
Java public class Test { // Overloaded methods public void fun ( Integer i ) { System . out . println ( & quot ; fun ( Integer ) & quot ;); } public void fun ( String name ) { System . out . println ( & quot ; fun ( String ) & quot ;); } // Driver code public static void main ( String [] args ) { Test mv = new Test (); Integer arg = null ; // No compiler error mv . fun ( arg ); } }
Saída :
fun(Integer )
No cenário acima, se o valor 'arg' for nulo devido ao resultado da expressão, o valor nulo será passado para o método1. Aqui não obteríamos erro de tempo de compilação porque estamos especificando que o argumento é do tipo Integer, portanto, o compilador seleciona o método1 (Integer i) e executará o código dentro dele. Nota: Este problema não persistiria quando os argumentos do método substituído fossem do tipo de dados primitivo. Porque o compilador selecionará o método mais adequado e o executará.