java - 调用重载方法时出现错误信息 "is ambiguous for the type Other"

标签 java

我知道下面的程序会出现编译错误:

The method runThis(Integer) is ambiguous for the type Other

我不明白的是原因。

public class Other {


    public static void main(String[] args) {

        runThis(null);

    }

    private static void runThis(Integer integer){
        System.out.println("Integer");
    }

    private static void runThis(Object object){
        System.out.println("Object");
    }

    private static void runThis(ArithmeticException ae){
        System.out.println("ArithmeticException");
    }

}

此外,当我如下更改程序时,它会打印“ArithmeticException”。我也不知道是什么原因。谁能给我解释一下?

public class Other {


public static void main(String[] args) {

    runThis(null);

}

private static void runThis(Exception exception){
    System.out.println("Exception");
}

private static void runThis(Object object){
    System.out.println("Object");
}

private static void runThis(ArithmeticException ae){
    System.out.println("ArithmeticException");
}

最佳答案

当您传入 null 时,可以将其转换为任何引用类型。 Java 将尝试找到具有最具体类型的重载方法。

在您的第一个示例中,可能性是 ObjectIntegerArithmeticExceptionIntegerArithmeticException 都比 Object 更具体,但两者都不比另一个更具体,所以它是不明确的。

在您的第二个示例中,可能性是 ObjectExceptionArithmeticExceptionExceptionArithmeticException 都比 Object 更具体,但是 ArithmeticException 也比 Exception,因此歧义得到解决,有利于 ArithmeticException

关于java - 调用重载方法时出现错误信息 "is ambiguous for the type Other",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26389263/

相关文章:

java - 代码错误, "illegal start of expression"

java - 计算数组中最长排序子序列的问题

java - 构建整个sql并使用preparedStatement运行它

java - Cookie 未在 Chrome 或 Firefox 的本地主机上设置

java - 如何在类型查询中制定 JOIN?

java - 您可以通过 MBean 或类似的东西重新加载 JBoss ESB 服务吗?

java - 获取与 hibernate 日期/时间匹配的记录

java - Pig Java UDF 问题

java.lang.UnsatisfiedLinkError : No implementation found due to Library not loading 错误

java - Weblogic主机名验证异常