Java中的方法重载和空错误
在Java中,重载方法是很常见的。下面是一个有趣的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);
}
}
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);
}
}
输出 :
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
在上述场景中我们得到编译时错误的原因是,这里的方法参数 Integer 和 String 都不是Java中的原始数据类型。这意味着它们接受空值。当我们将空值传递给方法 1 时,编译器会混淆它必须选择哪个方法,因为两者都接受空值。除非我们故意传递空值,否则不会发生此编译时错误。例如,请参阅以下我们在编码时通常遵循的场景。
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);
}
}
输出 :
fun(Integer )