Я работаю над Java Se 7 OCA и не могу понять, почему ниже код не компилируется. вызов aMethod в основном методе дает ошибку компиляции с указанием неоднозначного метода. Приоритетные правила между расширением и боксом, похоже, противоречат этому образцу метода перегрузки.Java-метод перегрузки с бокса/расширения
public class Overloading {
public static void main(String[] args) {
Byte i = 5;
byte k = 5;
aMethod(i, k);
}
static void aMethod(byte i, Byte k) {
System.out.println("Inside 1");
}
static void aMethod(byte i, int k) {
System.out.println("Inside 2");
}
static void aMethod(Byte i, Byte k) {
System.out.println("Inside 3 ");
}
}
Ошибка "Метод aMethod (байты, байты) является неоднозначным для типа Перегрузки". Когда я прокомментирую первый метод, он дает такую же ошибку для второго метода.
Мое мышления: Первый метод нуждается в распаковке и бокс Второй метод требует распаковки и расширение Третьего метод требует только бокса. Так что это должен быть третий метод, так как он нуждается в наименьшем преобразовании, и все они имеют преобразование в бокс.
И сообщение об ошибке было? – bmargulies
Почему вы думаете, что этот * должен компилироваться? –
Вы можете найти правильное объяснение проблемы здесь: http://stackoverflow.com/a/4921807/1065197. Поскольку компилятор перейдет к этапу 3, он найдет более подходящий метод для использования, что будет двусмысленным. –