【问题标题】:Vararg type inference on null parameter [duplicate]空参数的可变参数类型推断[重复]
【发布时间】: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


【解决方案1】:

据我了解,String[] 比 Object[] 更具体,因此 null 与 String[] 匹配;但是,如果您专门使用 null,则经常需要将 null 转换为类型。如果输入了参数,则不会出现此问题。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多