Обычно методы с фиксированным числом аргументов предпочтительнее перегруженных методов с переменным числом аргументов.Однако этот пример ведет себя по-разному:
public class Main{
public static void main(String[] args){
print(1);
print(1,2);
print(new String[]{"a","b"});
print(new String[][]{{"a","b"},{"c","d"}});
}
public static void print(Object object){
System.out.println("single argument method");
System.out.println(object);
}
public static void print(Object object0,Object object1){
System.out.println("two argument method");
System.out.println(object0);
System.out.println(object1);
}
public static void print(Object... objects){
System.out.println("varargs method with "+objects.length+" arguments");
for(Object object : objects){
System.out.println(object);
}
}
}
Вывод:
single argument method
1
two argument method
1
2
varargs method with 2 arguments
a
b
varargs method with 2 arguments
[Ljava.lang.String;@5e2de80c
[Ljava.lang.String;@1d44bcfa
Третья строка main
вызывает метод с одним аргументом, а именно String [] с двумя элементами,Но он не выполняет метод с одним аргументом, а выполняет метод varargs и действует так, как если бы я дал ему два аргумента (это нормально, так как это массив).
Теперь вопрос: Должно ли это случиться?Я нашел ошибку или недокументированное поведение?Есть ли причина, почему он это делает?
Почему я делаю это: я хочу создать ярлык для печати на консоль, который может принимать как произвольное количество аргументов (длянесколько строк), а также хорошо печатать массивы и списки.