对null参数的Vararg类型推断

时间:2015-10-07 20:36:16

标签: java type-inference variadic-functions

如果我有两个具有相同签名的方法,仅由vararg类型改变,那么当我不使用参数或传递null时,Java如何知道要调用哪个?

例如,如果我有这两种方法:

public static String test(String a, String b, Object... args){
    return "object args";
}

public static String test(String a, String b, String... args){
    return "string args";
}

我打电话给:

System.out.println(test("a", "b"));
System.out.println(test("a", "b", null));

输出为“string args”。为什么Java决定在这里调用第二种方法而不是第一种?我很难找到描述此规范的相关部分。

1 个答案:

答案 0 :(得分:1)

据我所知,String []比Object []更具体,因此null与String []匹配;但是,如果您专门使用null,则经常需要将null转换为类型。如果输入了参数,那么你就不会遇到这个问题。

test("a", "b", (String)null);

相同
String foo = null;
test("a", "b", foo);