Поэтому у меня есть следующие перегруженные методы:Java: перегружено разрешение метода
private static void foo(short... a)
{
System.out.println("Calling var-len");
}
private static void foo(int a, int b)
{
System.out.println("Calling int-int");
}
private static void foo(int a, double b) //(3)
{
System.out.println("Calling int-double");
}
private static void main (String[] args)
{
foo((short)2, (short)5); //This one outputs "Calling int-int"
}
Я знаю, что переменный метод Арности имеет самый низкий приоритет во время фазы разрешения метод, так что в этом случае, если я позвоню foo((short)2, (short)4);
я хотел бы получить " Вызов int-int ".
ОДНАКО, если я изменю метод (3) на foo(short a, double b)
, метод переменной arity выбран! (Java 7). Может ли кто-нибудь объяснить это?
Это интересный вопрос. Отправьте полный тестовый файл с полным набором функций и двумя наборами перегрузок (один показывает поведение A, другое поведение B). – user2864740
Я сам запускал код, но получаю ошибку двусмысленности, а не третий метод. Не могли бы вы прочесть несколько тестов? – cgf
Java 6_24 вызывает неоднозначную ошибку ссылки во время компиляции, что ИМХО - это правильная вещь в соответствии со спецификацией. –