我刚刚编写了一些具有以下结构的代码:
public void method(int x) {
//...
}
public void method(int x, String... things) {
//...
}
我很惊讶这个编译,如果我调用
method(3);
然后它会选择第一个。显然,这在某种意义上是自然选择的方法,但如果第一种方法不存在,这将是调用第二种方法的合理方法(使用空的可变参数数组)。那么它肯定应该被认为是模棱两可的并产生编译时错误吗?
还是将其视为特殊情况?
如此对待它似乎是错误的,因为这意味着添加一个新方法可能会破坏现有代码,这不是一个非常愉快的事态。
(天知道如果第一个被添加为包含第二个的子类的新方法,你最终会调用哪个......)