Я натрапив на цей фрагмент:
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
Як це неоднозначно? Чи не слід в цьому випадку просувати лише другий параметр, оскільки перший параметр вже є цілим? Перший парам в цьому випадку не потрібно просувати?
Компіляція успішна, якщо я оновлюю код, щоб додати інший метод:
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
- це метод неоднозначний, це неоднозначний заклик до методу.