Je suis tombé sur cet extrait:
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);
}
}
Cela entraînera une erreur de compilation:
Erreur: (15, 9) java: la référence à printSum est ambiguë à la fois la méthode printSum (int, double) dans ParamTest et la méthode printSum (long, long) dans la correspondance ParamTest
Comment est-ce ambigu? Ne devrait-on pas seulement promouvoir le deuxième paramètre dans ce cas puisque le premier paramètre est déjà un int? Le premier paramètre n'a pas besoin d'être promu dans ce cas, non?
La compilation réussit si je mets à jour le code pour ajouter une autre méthode:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
Permettez-moi de développer juste pour clarifier. Le code ci-dessous crée une ambiguïté:
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);
}
}
Ensuite, ce code ci-dessous entraîne également une ambiguïté:
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);
}
}
Cependant celui-ci n'entraîne pas d'ambiguïté:
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
- ce n'est pas la méthode qui est ambiguë, c'est l'appel à la méthode qui est ambiguë.