多个重载方法:null是否等于NullPointerException?

Anil Gowda:
public class TestMain {

    public static void methodTest(Exception e) {
        System.out.println("Exception method called");
    }

    public static void methodTest(Object e) {
        System.out.println("Object method called");
    }

    public static void methodTest(NullPointerException e) {
        System.out.println("NullPointerException method called");
    }

    public static void main(String args[]) {
        methodTest(null);
    }   
}

输出:NullPointerException方法调用

Thomas Always:

如果有多个重载方法可以使用给定参数调用(null在您的情况下),则编译器将选择最具体的方法。

参见http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5

您的情况methodTest(Exception e)比更为具体methodTest(Object e),因为Exception是Object的子类。而且methodTest(NullPointerException e)更加具体。

如果将NullPointerException替换为Exception的另一个子类,则编译器将选择该子类。

另一方面,如果您使用其他方法,例如testMethod(IllegalArgumentException e)编译器将抛出错误,因为它不知道选择哪个方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章