가변인자’만’ 있는 시그니처
class Math {
long add(int... args) {
//...
}
}
class MathTest {
public static void main(String[] args) {
Math math = new Math();
math.add(new int[]{1,2}); // Okay
math.add(); // Okay
}
}
가변인자’도’ 있는 시그니처
class Math {
long add(long start, long end, int... args) {
//...
}
}
class MathTest {
public static void main(String[] args) {
Math math = new Math();
math.add(1L, 2L, new int[]{1,2}); // Okay
math.add(1L, 2L, null); // Okay
math.add(1L, 2L); // Okay
}
}
오버로딩 되고 가변인자를 가지는 시그니처
다른 타입의 파라미터 일 때..
class Math {
long add(String... args) {
//...
}
long add(long start, long end, long... args) {
//...
}
}
class MathTest {
public static void main(String[] args) {
Math math = new Math();
math.add(new String[]{"1","2"}); // Okay
math.add(1L, 2L, null); // Okay
math.add(1L, 2L); // Okay
}
}
같은 타입의 파라미터 일 때..
class Math {
long add(long... args) {
//...
}
long add(long start, long end, long... args) {
//...
}
}
class MathTest {
public static void main(String[] args) {
Math math = new Math();
math.add(1L, 2L, new long[]{1,2}); // Okay
math.add(1L, 2L, null); // Okay
math.add(1L, 2L); // << !!! Ambiguous method call. Both
}
}