この宣言がコンパイル時にあいまいと見なされないのはなぜですか?
void f(int a) {
System.out.println("int");
}
void f(int... a) {
System.out.println("int...");
}
例えば:
f(2); // to one parameter both method should match (f(int) runs)
f(2,2); // f(int...)
この宣言がコンパイル時にあいまいと見なされないのはなぜですか?
void f(int a) {
System.out.println("int");
}
void f(int... a) {
System.out.println("int...");
}
例えば:
f(2); // to one parameter both method should match (f(int) runs)
f(2,2); // f(int...)
scence var-args 宣言の背後では、コンパイラによって実際に配列に変換されていると思います。したがって、パラメーターとして var-args を使用するメソッドは、実際には次のようになります。
void f(int[] a) {
System.out.println("int...");
}
void f(int... a) {
System.out.println("int...");
}
上記のメソッドは 1 つ以上の値を受け入れることができ、メソッドは 1 つの引数のみを含みます。
void f(int a) {
System.out.println("int");
} は、1 つの値を受け入れることもできます。