Посмотрите на этот код:SCJP вопрос: Метод неоднозначным
public class Test {
public static void main(String... args) {
flipFlop("hello", new Integer(4), 2004);
// flipFlop("hello", 10, 2004); // this works!
}
private static void flipFlop(String str, int i, Integer iRef) {
System.out.println(str + " (String, int, Integer)");
}
private static void flipFlop(String str, int i, int j) {
System.out.println(str + " (String, int, int)");
}
}
Компилятор выдает ошибку, что вызов является неоднозначным:
Описание Путь ресурсов Местоположение Тип Метод FlipFlop (String , int, Integer) неоднозначно для типа Test Test.java scjp19 - inheritence/src line 3 Задача Java
Но если комментарий d-out используется ti invoke flip-flop, метод однозначно вызывается (второй, поскольку autoboxing приходит после использования самого примитива).
Я ожидаю, что компилятор увидит, что второй аргумент будет распакован так или иначе, и судить, какой метод следует вызывать в зависимости от третьего аргумента. Почему этого не происходит? В чем причина?
Dupe: http://stackoverflow.com/questions/501412/why-does-autoboxing-make-some-calls-ambiguous-in-java – BalusC