Я наткнулся на этот фрагмент:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Это приведет к ошибке компиляции:
Ошибка: (15, 9) Java: ссылка на printSum неоднозначна какметод printSum (int, double) в ParamTest и метод printSum (long, long) в ParamTest match
Как это неоднозначно? Разве в этом случае не следует продвигать только второй параметр, поскольку первый параметр уже является int? Первый параметр не нужно продвигать в этом случае, верно?
Компиляция завершится успешно, если я обновлю код, добавив еще один метод:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
Позвольте мне расширить только для пояснения. Код ниже приводит к неоднозначности:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Тогда этот код ниже также приводит к неоднозначности:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Однако этот не результат неоднозначности:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, double b) {
System.out.println("In longDBL " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}