Я наткнулся на этот фрагмент:
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);
}
}
Error:(15, 9) java: reference to printSum is ambiguous both method printSum(int,double) in ParamTest and method printSum(long,long) in ParamTest match
- это не метод, который является неоднозначным, это вызов метода, который является неоднозначным.