次の構造のコードを書きました。
public void method(int x) {
//...
}
public void method(int x, String... things) {
//...
}
これがコンパイルされたことにかなり驚きました。
method(3);
次に、最初のものを選択します。明らかに、これはある意味で選択するのが自然な方法ですが、最初のメソッドが存在しない場合、これは (空の varargs 配列を使用して) 2 番目のメソッドを呼び出す合理的な方法です。確かに、あいまいであると見なされ、コンパイル時にエラーが発生するはずですか?
それとも、これは特別なケースとして扱われますか?
新しいメソッドを追加すると既存のコードが壊れる可能性があり、それはあまり幸せな状態ではないため、そのように扱うのは間違っているようです。
(最初のメソッドが 2 番目のメソッドを含むサブクラスの新しいメソッドとして追加された場合に、最終的にどちらを呼び出すかはわかりません...)