2

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関数が選択されますか?

4

2 に答える 2