错误消息"对于其他类型"是不明确的。调用重载方法时

时间:2014-10-15 18:10:49

标签: java

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

  

方法runThis(Integer)对于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");
}

2 个答案:

答案 0 :(得分:9)

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

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

在您的第二个示例中,可能性为ObjectExceptionArithmeticExceptionExceptionArithmeticException都比Object更具体,但ArithmeticException也比Exception更具体,因此歧义有利于{{1} }}

答案 1 :(得分:5)

null可以是任何Object(包括Integer)。添加一个演员,

更改此

runThis(null);

runThis((Integer) null);

runThis((Object) null);

消除歧义。