Ich bin auf diesen Ausschnitt gestoßen:
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);
}
}
Dies führt zu einem Kompilierungsfehler:
Fehler: (15, 9) Java: Der Verweis auf printSum ist mehrdeutig, sowohl die Methode printSum (int, double) in ParamTest als auch die Methode printSum (long, long) in ParamTest stimmen überein
Wie ist das mehrdeutig? Sollte in diesem Fall nicht nur der zweite Parameter heraufgestuft werden, da der erste Parameter bereits ein int ist? Der erste Parameter muss in diesem Fall nicht befördert werden, oder?
Die Kompilierung ist erfolgreich, wenn ich den Code aktualisiere, um eine weitere Methode hinzuzufügen:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
Lassen Sie mich nur zur Klarstellung erweitern. Der folgende Code führt zu Mehrdeutigkeiten:
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);
}
}
Dann führt dieser Code unten auch zu Mehrdeutigkeiten:
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);
}
}
Dies führt jedoch nicht zu Mehrdeutigkeiten:
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
- Es ist nicht die Methode, die mehrdeutig ist, sondern der Aufruf der Methode, die nicht eindeutig ist.