Saya menemukan potongan ini:
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);
}
}
Ini akan menghasilkan kesalahan kompilasi:
Kesalahan: (15, 9) java: referensi ke printSum bersifat mendua baik metode printSum (int, dobel) di ParamTest dan metode printSum (panjang, panjang) di pertandingan ParamTest
Bagaimana ini ambigu? Bukankah hanya parameter kedua yang dipromosikan dalam kasus ini karena parameter pertama sudah menjadi int? Param pertama tidak perlu dipromosikan dalam kasus ini, kan?
Kompilasi berhasil jika saya memperbarui kode untuk menambahkan metode lain:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
Biarkan saya memperluas hanya untuk memperjelas. Kode di bawah ini menghasilkan ambiguitas:
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);
}
}
Maka kode di bawah ini juga menghasilkan ambiguitas:
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);
}
}
Namun yang ini tidak menghasilkan ambiguitas:
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
- itu bukan metode yang ambigu, itu panggilan ke metode yang ambigu.