【问题标题】:Why is this not an ambiguous call? (varargs parameters) [duplicate]为什么这不是一个模棱两可的电话? (可变参数)[重复]
【发布时间】:2017-02-16 17:10:38
【问题描述】:
public class SomeClass{
          public SomeClass(String...test){}

          public SomeClass(String a, String b){}

          public void someMethod(String...test){}

          public void someMethod(String a, String b){}
}

如果我编写如下内容,编译器如何知道我指的是哪个构造函数/方法:

SomeClass c = new SomeClass("p1","p2"):

c.someMethod("p1","p2");

【问题讨论】:

    标签: java


    【解决方案1】:

    方法重载解决分为 3 个阶段。只有第三个和最后一个阶段将带有可变参数的方法视为潜在候选者(并且该阶段仅在前一个阶段没有找到任何匹配的候选者时才会发生)。因此,在您的示例中,编译器在第一步中只考虑没有可变参数的方法,因此没有歧义。

    这种行为的原因是可变参数方法是在 Java 5 中引入的,如果编译器在方法重载解析的第一阶段考虑它们,可能会导致现有代码中断。

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2021-11-28
      • 1970-01-01
      • 2011-10-04
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多