方法参数中的空值

时间:2015-05-08 15:22:11

标签: java null type-conversion overloading

我有以下代码

import java.util.List;

public class Sample {

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

    static void test(List<Object> a){
        System.out.println("List of Object");
    }
    static void test(Object a){
        System.out.println("Object");
    }
}

我在控制台中得到了以下输出

List of Object

为什么不拨打test(Object a)?你能解释一下如何“列为”null吗?

2 个答案:

答案 0 :(得分:7)

简而言之,选择了重载中的最具体的方法。

在这种情况下,最具体的方法是采用List<Object>的方法,因为它是Object的子类型。

Java用于选择重载方法的确切算法非常复杂。有关详细信息,请参阅Java Language Specification section 15.12.2.5

答案 1 :(得分:4)

在这样的情况下,始终具体。如果将List更改为String,它将打印相同的内容。每个类都是Object的子类,所以如果它必须重载,那么将是更具体的类。