Я взял код из этой ссылки и изменил некоторые его части:
public static void main(String[] args) {
Byte i = 5;
byte k = 5;
aMethod(i, k);
}
//method 1
static void aMethod(byte i, Byte k) {
System.out.println("Inside 1");
}
//method 2
static void aMethod(byte i, int k) {
System.out.println("Inside 2");
}
//method 3
static void aMethod(Byte i, Byte k) {
System.out.println("Inside 3 ");
}
//method 4
static void aMethod(Byte i, Byte ... k) {
System.out.println("Inside 4 ");
}
Компилятор дает ошибку (метод неоднозначен для типа Overloading) для методов 1, 2 и 3, но не 4 (почему?)
Ответ заключается в механизме, который java использует для сопоставления вызовов методов методам. Механизм выполняется в три этапа, в каждой фазе, если он находит метод совпадения:
+ фаза первая: используйте расширение, чтобы найти метод сопоставления (не найдено совпадающих методов)
+ второй этап: (также) использовать бокс / unboxing для поиска метода сопоставления (метод 1,2 и 3)
+ фаза три: (также) использовать var args (метод 4 соответствует!) [/ g6]