【发布时间】:2015-10-07 20:36:16
【问题描述】:
如果我有两个具有相同签名的方法,仅因 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));
输出是“字符串参数”。为什么 Java 决定在这里调用第二个方法而不是第一个?我很难找到描述这一点的规范的相关部分。
【问题讨论】:
-
像往常一样,Java 为
null选择最具体的类型,而String[]比Object[]更具体。更多信息:stackoverflow.com/questions/13033037/… -
啊,可变参数让我从更简单、更明显的场景中分心。正如重复链接中所引用的那样:“选择此处的字符串重载是因为 Java 编译器根据 JLS 的第 15.12.2.5 节选择最具体的重载。”呃。谢谢大家。
标签: java type-inference variadic-functions