📜  Java中的方法重载和空错误

📅  最后修改于: 2022-05-13 01:54:26.312000             🧑  作者: Mango

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 )