Java 認定試験の準備をしているときに、Java で次のことができることに非常に驚きました。
public class Consumer {
public void buy(Object o) {
System.out.println("Buying one object");
}
public void buy(Object... o) {
System.out.println("Buying multiple objects");
}
public static void main(String[] args) {
Consumer consumer = new Consumer();
consumer.buy(new Object());
consumer.buy("a String");
}
}
このクラスは正常にコンパイルおよび実行されます。「Buying one object」が 2 回表示されます。実際には、両方の関数が使用できるため、コンパイラ エラーが表示されると思いました。ここで、コンパイラはどのように最適な一致関数を選択しますか? 引数を1つだけ渡すと、常に非varargs関数が選択されますか?